评论区
登录之后才能评论Scratch作品哦第一行是两个整数N 和M,表示迷宫尺寸。 接下来N 行,每行输入 M 个字符,每个字符表示迷宫中的一个小方格。 字符的含义如下: S:起点 E:终点 -:空地,可以通过 #:障碍,无法通过
continue;
}
dfs(nr,nc,sum+1);
}
mg[r][c]='-';
sum--;
} int main () {
cin>>n>>m;
for(int i=0; i<n; i++) {
cin>>mg[i];
for(int j=0; j<m; j++) {
if(mg[i][j]=='S') {
sr=i;
sc=j;
} else if(mg[i][j]=='E') {
er=i;
ec=j;
}
}
}
dfs(sr,sc);
if(cnt==1000)
cout<<-1;
else
cout<<cnt;
return 0;
}
广度优先搜索迷宫最短路径(自己写的):#include<bits/stdc++.h> using namespace std; int n,m,sr,sc,er,ec,cnt=1000; string mg[35]; int dr[]= {-1,0,1,0}; int dc[]= {0,1,0,-1}; void dfs(int r,int c,int sum=0) { mg[r][c]='#'; if(sum>=cnt) { mg[r][c]='-'; return; } if(r==er&&c==ec) { cnt=min(cnt,sum); mg[r][c]='-'; return; } for(int i=0; i<4; i++) { int nr=r+dr[i],nc=c+dc[i]; if(nr<0||nr>=n||nc<0||nc>=m||mg[nr][nc]=='#') {
cin>>m;
for(int i=1; i<=m; i++) {
for(int j=1; j<=m; j++) {
cin>>a[i][j];
}
}
if(dmgpd(1,1)) {
cout<<"YES"<<endl;
} else {
cout<<"NO"<<endl;
}
}
return 0;
}
深度优先搜索迷宫最短路径(自己写的):#include<bits/stdc++.h> using namespace std; int m; int a[40][40]; int dr[]= {-1,0,1,0}; int dc[]= {0,1,0,-1}; bool dmgpd(int r,int c) { a[r][c]=0; if(r==m&&c==m) { return true; } for(int i=0; i<4; i++) { int nr=r+dr[i],nc=c+dc[i]; if(nr>m||nr<1||nc>m||nc<1||a[nr][nc]==0) continue; if(dmgpd(nr,nc)) { return true; } } return false; } int main() { int n; cin>>n; while(n--) {