#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101],dx[4]={-1,0,0,1},dy[4]={0,-1,1,0},t[101][101],s=1,b[101][101];
void dfs(int h,int l)//遍历整个矩阵,找出方案
{
for(int i=0;i<4;i++)
{
int nx=h+dx[i],my=l+dy[i];//当前位置的下一个位置
if(nx<1||nx>n||my<1||my>m||t[nx][my]==1)continue;//若越界了或这里是堵墙,跳过
t[nx][my]=1;//标记为已走过
b[nx][my]=++s;//记录步数
dfs(nx,my);//下一次深搜
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];//读入矩阵
if(a[i][j]==1)t[i][j]=1;//将墙壁存储下
}
}
t[1][1]=1,b[1][1]=1;//第一个位置肯定是必须走
dfs(1,1);//从左上角开始
if(a[1][1]==1)//第一步就是墙
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cout<<0<<" “;//后面没有路了!!
cout<<”\n";
}
}
else
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cout<<b[i][j]<<" “;//输出步数
cout<<”\n";
}
}
return 0;
}
7 个赞
使用markdown可以让别人更好的阅读你的代码
先点这个
再将你的代码粘粘
6 个赞