2 条题解
-
1
这是一道广搜的入门题。
广搜过程(请确保你学过队列):
1、起点入队。
2、取出队头。
3、生成下一层结点。
4、检查目标结点是否在这些结点中,若不在,继续生成并检查结点。(即按层遍历)
广搜优点:第一次搜索到某个点时,就是最快到达该点的方式。
详细做法见注释。
#include <iostream> #include <queue> #include <cstdlib> using namespace std; struct Point{ int x,y; }; int n,m,x,y,s,t,dis[6][6]; bool vis[6][6]; queue<Point> q; const int dx[]={-1,-2,-2,-1,1,2,2,1};//8个方向 const int dy[]={-2,-1,1,2,-2,-1,1,2}; void bfs(){ q.push((Point){x,y});//起点入队 vis[x][y]=1; dis[x][y]=0; while (q.size()){//在队列非空时一直搜索 Point now=q.front();//处理队头 q.pop(); for (int i=0;i<8;i++){ int nx=now.x+dx[i];//下一个点的坐标 int ny=now.y+dy[i]; if (nx>=1&&nx<=n&&ny>=1&&ny<=m&&!vis[nx][ny]){ q.push((Point){nx,ny});//将队头能到达的点入队 dis[nx][ny]=dis[now.x][now.y]+1;//记录步数 vis[nx][ny]=1;//标记为已走过 if (nx==s&&ny==t){ cout<<dis[nx][ny]; exit(0);//在其他函数内结束整个程序 } } } } } int main(){ cin>>n>>m>>x>>y>>s>>t; bfs(); return 0; }
-
-2
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 435
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 93
- 已通过
- 65
- 上传者