bfs
可用于权值相同为1的时候求最短路问题
#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int N = 110; typedef pair<int, int>PII; queue<PII>q; int a[N][N], f[N][N]; int n, m; int bfs() { memset(f, -1, sizeof(f)); q.push({ 0,0 }); f[0][0] = 0; while (q.size()) { auto k = q.front();//找一个保存一个,弹出一个 q.pop(); int xp[4] = { 1,0,-1,0 }; int yp[4] = { 0,1,0,-1 };//进行四个方向的查找 for (int i = 0; i < 4; i++) { int x = k.first + xp[i]; int y = k.second + yp[i];//看下一个方向 if (x >= 0 && x < n && y >= 0 && y < m && f[x][y] == -1&&a[x][y]==0) {//判断是否可以走通,一定不要忘记a[x][y]==0的判定 f[x][y] = f[k.first][k.second] + 1;//前一个位置的总和基础上+1 q.push({ x,y });//将下一个位置加入,多个方向有就加多个,然后分别进行操作,类似于递归 } } } return f[n - 1][m - 1];//因为确保最右边角有0,且有通路,所以用这样 } int main() { cin >> n >> m; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &a[i][j]); cout << bfs() << endl; return 0; }
标签:26,int,bfs,++,second,&&,include From: https://www.cnblogs.com/daimazhishen/p/17730928.html