5 条题解

  • 1
    @ 2023-11-4 14:48:36

    10

    • 0
      @ 2023-11-11 9:59:30
      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
        @ 2023-4-5 19:32:07
        #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
          @ 2023-4-5 19:31:42

          ,,, #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
            @ 2022-10-5 14:53:03

            #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
            上传者