5 条题解

  • 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;
    }
    

    信息

    ID
    1310
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    116
    已通过
    41
    上传者