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;
}
测试完全正确,但是。。。
帮忙找一下啊