#include<bits/stdc++.h>usingnamespace std;constint N =110;typedef pair<int,int> PII;int n, m;int g[N][N], d[N][N];int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};voidbfs(){queue<PII> q;q.push({0,0});d[0][0]=0;while(q.size()){auto t = q.front(); q.pop();int x = t.first, y = t.second;for(int i =0; i <4; i ++){int a = x + dx[i], b = y + dy[i];if(a >=0&& a < n && b >=0&& b < m &&!d[a][b]&&!g[a][b]){d[a][b]= d[x][y]+1;q.push({a, b});}}}}intmain(){cin >> n >> m;for(int i =0; i < n; i ++){for(int j =0; j < m; j ++){cin >> g[i][j];}}bfs();cout << d[n-1][m-1];return0;}
#include<bits/stdc++.h>usingnamespace std;string s;
string t;
unordered_map<string,int> d;int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};intbfs(string s){queue<string> q;string end ="12345678x";q.push(s);while(q.size()){auto t = q.front(); q.pop();if(t == end)return d[t];int dist = d[t];int k = t.find("x");int x = k /3, y = k %3;for(int i =0; i <4; i ++){int a = x + dx[i], b = y + dy[i];if(a >=0&& a <3&& b >=0&& b <3){swap(t[a *3+ b], t[k]);if(!d.count(t)){d[t]= dist +1;q.push(t);}swap(t[a *3+ b], t[k]);}}}return-1;}intmain(){for(int i =1; i <=9; i ++){cin >> t;s += t;}cout <<bfs(s);return0;}
#include<bits/stdc++.h>usingnamespace std;constint N =1e5+10;vector<int> G[N];int n, m;int d[N];intbfs(){memset(d,-1,sizeof d);queue<int> q;q.push(1);d[1]=0;while(q.size()){auto t = q.front(); q.pop();for(auto j : G[t]){if(d[j]==-1){d[j]= d[t]+1;q.push(j);}}}return d[n];}intmain(){cin >> n >> m;for(int i =0; i < m; i ++){int a, b;cin >> a >> b;G[a].push_back(b);}cout <<bfs();return0;}
一、现象
order by 排序加了limit后更慢了?
test# explain analyze select userid from dba_users where username like %aaaaaaaaaaaaaaaaaa% order by userid ;QUERY PLAN
--------------…
一、原理
队列通常是链表结构,只允许在一端进行数据插入,在另一端进行数据删除。
队列的特性是链式存储(随机增删)和先进先出(FIFO:First In First Out)。 队列的缺陷:
不支持随机…