啊~~,親愛なる愛と愁・三 shopping,やっと終わりましたか,ちょっと名残惜しいですね。でもこの問題はいいですね,簡単なBFSの練習になります。
不会日语的看这里・ω・:亲爱的爱与愁·三 shopping,终于完结了吗,还有点舍不得呢。不过这道题还是不错的,可以当作一个简单的BFS练习。
刚刚小小的装了一下,应该是成功了。这道题作为一道黄题,还是很合格的,题不难,算法不简单,细节挺多的,不太好处理。
思路
一道非常简单的裸的BFS题,学过的话拿板子改一下输入输出就能过了(应该),除非你不会改。
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int Map[1001][1001];
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int ans;
int vis[1001][1001];
int sx,sy,ex,ey;
struct node{
int x,y,step;
};
int bfs(int x,int y){
queue<node>q;
node now;
node nex;
int tx,ty,tz;
vis[x][y]=1;
now.x=x;
now.y=y;
now.step=0;
q.push(now);
while(!q.empty()){
now=q.front();
q.pop();
for(int i=0;i<4;i++){
tx=now.x+dir[i][0];
ty=now.y+dir[i][1];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&Map[tx][ty]!=1&&!vis[tx][ty]){
//有能力还是尽量正着写,不然容易出错,附上正着判断的代码
//x<=0||x>n+1||y<=0||y>m+1||vis[x][y]||Map[x][y]==1
nex.x=tx;
nex.y=ty;
nex.step=now.step+1;
vis[nex.x][nex.y]=1;
if(Map[tx][ty]==3){
return nex.step;
}
q.push(nex);
}
}
}
return -1;
}
int main(){
cin >> n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%1d",&Map[i][j]);//特殊用法,不用字符串也可以达到同样的效果,输入每个数的时候可以不用空格
}
}
cin >> sx >> sy;
cin >> ex >> ey;
Map[ex][ey]=3;
int ans=bfs(sx,sy);
cout << ans;
return 0;
}
好了,文章也看完了,代码也复制了,点个赞不过分吧