太原公司网站建设,响应式网站模板之家,wordpress内容批量替换,中国前500强企业排名昨天学习了bfs的基本概念#xff0c;今天来做一道经典习题练练手吧#xff01; bfs常用的两类题型
1.从A出发是否存在到达B的路径(dfs也可)
2.从A出发到B的最短路径#xff08;数小:20才能用dfs#xff09;
遗留的那个问题的答案-
题目#xff1a;走迷宫 答案今天来做一道经典习题练练手吧 bfs常用的两类题型
1.从A出发是否存在到达B的路径(dfs也可)
2.从A出发到B的最短路径数小:20才能用dfs
遗留的那个问题的答案-
题目走迷宫 答案
//走迷宫
#includeiostream
#includecstring
#includealgorithm
#includequeue
using namespace std;
typedef pairint,int PII;const int N110;int n,m;
int g[N][N];
int dist[N][N];
queuePII q;//队列 int dx[]{-1,0,1,0};
int dy[]{0,1,0,-1};//上右下左 int bfs(int x1,int y1)
{memset(dist,-1,sizeof dist);//初始化为-1q.push({x1,y1});dist[x1][y1]0;while(q.size()!q.empty())//队列不空继续循环 {PII t q.front();//取出队头 q.pop();for(int i0;i4;i){int at.firstdx[i];int bt.seconddy[i];//换方向 if(a1||an||b1||bm) continue;//越界if(g[a][b]0) continue;if(dist[a][b]0) continue;q.push({a,b});dist[a][b]dist[t.first][t.second]1;if(anbm){return dist[n][m];}}}return dist[n][m];
}int main()
{scanf(%d %d,n,m);for(int i1;in;i){for(int j1;jm;j){scanf(%d,g[i][j]);}}int resbfs(1,1);printf(%d\n,res);return 0;} 在coding中遇到的问题 作为一个不太聪明的小白在看懂这段代码以及练习过程中自然是遇到了很多很多的问题在此记录一下 ~
1.memset(dist,-1,sizeof dist);
memset是一个初始化函数作用是将某一块内存中的全部设置为指定的值。
void *memset(void *s, int c, size_t n); s指向要填充的内存块。c是要被设置的值。n是要被设置该值的字符数。返回类型是一个指向存储区s的指针。 2.代码运行过程仅供参考 有些许潦草哎
3.要点梳理 你学会了吗