#include<iostream>
using namespace std;
int n;
bool a[100][100];
int b[100][100],dir[9][2]={{0},{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
void dfs(int x,int y,int t)
{
if(t<b[x][y])b[x][y]=t;
if(t==n*n-1)return ;
int nx,ny;
for(int i=1;i<=4;i++)
{
nx=x+dir[i][0],ny=y+dir[i][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=n)
dfs(nx,ny,t+1);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
b[i][j]=100000;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!a[i][j])
b[i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!b[i][j])
dfs(i,j,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
struct node{
int x,y,bs;
}tmp,h,st;
int n;
int map[101][101],time[101][101],f[101][101];
int dir[5][2]={{0},{1,0},{0,1},{-1,0},{0,-1}};
queue<node> q;
void bfs(int hh,int sh){
st.x=hh;st.y=sh;st.bs=0;
q.push(st);
while (!q.empty()){
h=q.front();
time[h.x][h.y]=min(time[h.x][h.y],h.bs);
q.pop();
for (int i=1;i<=4;i++){
int nx,ny;
nx=h.x+dir[i][0];
ny=h.y+dir[i][1];
if (nx<=n&&ny<=n&&!f[nx][ny]&&nx>=1&&ny>=1){
tmp.x=nx;
tmp.y=ny;
tmp.bs=h.bs+1;
q.push(tmp);
f[nx][ny]=1;
}
}
}
}
int main (){
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
cin>>map[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (map[i][j]==1)
time[i][j]=1000000;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++){
memset(f,0,sizeof(f));
if (map[i][j]==0)
bfs(i,j);
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
cout<<time[i][j]<<" ";
cout<<endl;
}
return 0;
}
这是编译错误的代码,看看你改一下试试。
望采纳,谢谢!