5 条题解
-
0
using namespace std; int n_x[4]={0,-1,0,1}; int n_y[4]={-1,0,1,0};//上下左右四个方向的移动 int a[12][12];//a数组表示迷宫矩阵,0为能走,1为不能走 int n,t=0;//t用来统计到达终点的路径总数 void dfs(int x,int y){//站在x,y这个点,尝试向其他四个方向走 if(x==n&&y==n){//如果此刻已经站在终点 t++;//路经+1 return;//返回 } for(int i=0;i<4;i++){//四个方向选择 int nx=x+n_x[i]; int ny=y+n_y[i];//计算下一步的坐标 if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&a[nx][ny]==0){ //当下一个坐标在迷宫范围内,并且它能走 a[nx][ny]=1;//先标记改点状态为走过 dfs(nx,ny);//站下nx,ny这个点,继续尝试 a[nx][ny]=0;//走不通返回时,把这个点的状态改回来 } } } int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; a[1][1]=1;//由于是从起点出发,那么起点状态一开始就要设置为1,防止走回头路 dfs(1,1); if(t>0) cout<<"YES"; else cout<<"NO"; return 0; }
-
-1
#include<bits/stdc++.h> using namespace std; int a[11][11],b[11][11],n,t,h[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; void zzh(int x,int y){ if(x==n && y==n) { t=1; return; } for(int k=0;k<4;k++) { int tx=x+h[k][0]; int ty=y+h[k][1]; if(tx<1||tx>n||ty<1||ty>n) { continue; } if(a[tx][ty]==0 && b[tx][ty]==0) { b[tx][ty]=1; zzh(tx,ty); b[tx][ty]=0; } } return; } int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } b[1][1]=1; zzh(1,1); if(t==1) { cout<<"YES"; } else { cout<<"NO"; } return 0; }
-
-1
,,, #include<bits/stdc++.h> using namespace std; int a[11][11],b[11][11],n,t,h[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; void zzh(int x,int y){ if(xn && yn) { t=1; return; } for(int k=0;k<4;k++) { int tx=x+h[k][0]; int ty=y+h[k][1]; if(tx<1||tx>n||ty<1||ty>n) { continue; } if(a[tx][ty]==0 && b[tx][ty]0) { b[tx][ty]=1; zzh(tx,ty); b[tx][ty]=0; } } return; } int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } b[1][1]=1; zzh(1,1); if(t1) { cout<<"YES"; } else { cout<<"NO"; } return 0; } ,,,
-
-2
#include #include #include #include #include #include using namespace std; int n,b1,b2,e1,e2; int a[110][110]; int tx[5]={0,0,1,0,-1}; int ty[5]={0,1,0,-1,0};
void dfs(int x,int y){ a[x][y]=1; int fx,fy; for(int i=1;i<=4;i++){ fx = x+tx[i]; fy = y+ty[i]; if(fx>=1 && fx<=n && fy<=n && fy>=1 && a[fx][fy]0){ if(fxe1&&fy==e2){ cout<<"YES"; exit(0); } else{ dfs(fx,fy); } } } }
int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>a[i][j]; } } b1=1;b2=1;e1=n;e2=n; if(a[b1][b2]==1 || a[e1][e2]==1){ cout<<"NO"; } else{ dfs(1,1); cout<<"NO"; } return 0; }
- 1
信息
- ID
- 1310
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 116
- 已通过
- 41
- 上传者