3 条题解
-
6
#include<bits/stdc++.h> using namespace std; int r,c,dx[]={-1,0,0,1},dy[]={0,-1,1,0}; char a[45][45]; bool vis[45][45]; struct Point{ int x,y,step; }; queue<Point> q; bool check(int x,int y){ // 检查该点(x,y)是否可以通行以及是否未走过 return x>=1&&y>=1&&x<=r&&y<=c&&!vis[x][y]&&a[x][y]=='.'; } int bfs(){ vis[1][1]=1; q.push((Point){1,1,1}); // 点(1,1)为什么花了1步我不理解,0步是WA,1步是AC while(q.size()){ Point now=q.front(); q.pop(); for(short i=0;i<4;i++){ int nx=now.x+dx[i],ny=now.y+dy[i]; if(check(nx,ny)){ if(nx==r&&ny==c)return now.step+1; vis[nx][ny]=1; q.push((Point){nx,ny,now.step+1}); } } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>r>>c; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin>>a[i][j]; cout<<bfs(); return 0; }
-
1
深搜
#include <bits/stdc++.h> using namespace std; int n,m,b[100][100];//b数组----用途如下 /* 储存最少步数(因为dfs第一次储存的不一定是最少的) 这个数组初始值为最大数(INT_MAX)方便储存 发现有步数更少的更新当前的值 */ char a[100][100];//a数组储存迷宫 //方向数组(右,上,左,下) int fx[5]={0,0,1,0,-1}; int fy[5]={0,1,0,-1,0}; //递归深搜(dfs) void dfs(int x,int y,int k){k标记步数 b[x][y]=k;//上来先改标记数组为k for (int i=1;i<=4;i++){//循环4次(四个方向) //tx,ty方向(不用说吧) int tx=x+fx[i]; int ty=y+fy[i]; if (a[tx][ty]=='.'&&k+1<b[tx][ty])dfs(tx,ty,k+1);//如果没有出界&&这个是最优走法->递归(深度优先搜索) } } int main(){ cin>>n>>m;//输入 for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ cin>>a[i][j];//读入数组 b[i][j]=INT_MAX;//初始化b数组 } } dfs(1,1,1);函数!!!! cout<<b[n][m];//输出最少步数 return 0; }
广搜
</span>#include <bits/stdc++.h> using namespace std; int n,m,tx,ty; char a[110][110]; int fx[5]={0,0,1,0,-1}; int fy[5]={0,1,0,-1,0}; struct bfs{ int x,y,ans; }r; queue<bfs>q; int main(){ cin>>n>>m; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++)cin>>a[i][j]; } r.x=r.y=r.ans=1; q.push(r); a[1][1]='#'; while(!q.empty()){ for (int i=1;i<=4;i++){ tx=q.front().x+fx[i]; ty=q.front().y+fy[i]; if (a[tx][ty]=='.'){ r.x=tx; r.y=ty; r.ans=q.front().ans+1; q.push(r); a[tx][ty]='#'; } if (tx==n&&ty==m){ cout<<q.back().ans; return 0; } } q.pop(); } return 0; }
-
-8
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 429
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 177
- 已通过
- 74
- 上传者