顶一波,然而并不知道为什么
by 已注销^6Gv$vkg @ 2018-09-15 13:55:10
```
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
bool txt[200][200],used[200][200];
int ax[8]={1,1,1,0,0,-1,-1,-1},ans=10000;
int ay[8]={1,-1,0,1,-1,0,1,-1};int n,m;
void cheak(int x,int y,int l){
if(txt[x][y]==1){
ans=min(ans,l);return;
}
for(int i=0;i<8;i++){
int nx=x+ax[i];
int ny=y+ay[i];
if(nx>0&&ny>0&&nx<=m&&ny<=n&&used[nx][ny]==0){
used[x][y]=1;
cheak(nx,ny,l+(abs(ax[i])+abs(ay[i])));
used[x][y]=0;
}
}
}
int main(){
char c;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>c;txt[j][i]=c-'0';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans=10000;
cheak(j,i,0);
cout<<ans<<" ";
}
cout<<endl;
}
return 0;
}
```
同问
by Dcue @ 2019-03-02 15:41:34
```
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[200][200],b[200][200];
bool s[200][200],flag;int p=0;
int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
struct node
{
int x,y,time;
};
void dfs(int x,int y,int dis)
{
if(flag==1&&p<dis)return ;
if(a[x][y]==1)
{
p=dis;
flag=1;
return ;
}
for(int i=0;i<4;i++)
{
int tx,ty;
tx=x+d[i][0];
ty=y+d[i][1];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&s[tx][ty]==0)
{
s[tx][ty]=1;
dfs(tx,ty,dis+1);
s[tx][ty]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%1d",&a[i][j]);
b[i][j]=a[i][j];
if(b[i][j]==1)b[i][j]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==0)
{
/*p=0;flag=0;
memset(s,0,sizeof(s));
s[i][j]=1;
dfs(i,j,0);
b[i][j]=p;*/
flag=0;
p=0;
memset(s,0,sizeof(s));
s[i][j]=1;
queue<node> que;
node u;
u.x=i,u.y=j,u.time=0;
que.push(u);
while(!que.empty())
{
node v=que.front();
que.pop();
if(a[v.x][v.y]==1)
{
b[i][j]=v.time;
break;
}
for(int i=0;i<4;i++)
{
int tx,ty;
tx=v.x+d[i][0];
ty=v.y+d[i][1];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&s[tx][ty]==0)
{
s[tx][ty]=1;
node f;
f.x=tx,f.y=ty,f.time=v.time+1;
que.push(f);
}
}
}
}
}
}
for(int i=1;i<=n;i++,cout<<endl)
for(int j=1;j<=m;j++)
cout<<b[i][j]<<" ";
return 0;
}
```
同问
by 肖泽源 @ 2019-08-24 20:38:35
```cpp
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n, m;
char mp[200][200];
int maze[200][200];
bool vis[200][200];
int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
struct node{
int x, y, d;
node(int xx, int yy, int dd){
x = xx;
y = yy;
d = dd;
}
};
int bfs(int x, int y, int step){
if(mp[x][y] == '1')
return 0;
vis[x][y] = true;
queue<node> q;
q.push(node(x, y, 0));
while(!q.empty()){
node now = q.front();
q.pop();
if(mp[now.x][now.y] == '1'){
return now.d;
}
for(int i = 0; i < 4; i ++){
int tx = now.x + dir[i][0];
int ty = now.y + dir[i][1];
if(tx < 1 || tx > n ||ty < 1 || ty > m)
continue;
if(!vis[tx][ty]){
q.push(node(tx, ty, now.d + 1));
vis[tx][ty] = true;
}
}
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
cin >> mp[i][j];
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
int ans = bfs(i, j, 0);
maze[i][j] = ans;
memset(vis, false, sizeof(vis));
}
}
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
cout << maze[i][j] << ' ';
}
cout << endl;
}
return 0;
}
同问
```
by Pureqyu @ 2020-04-02 01:14:14
@[高木木](/user/113368) 吸氧
by the_shadow @ 2021-10-24 19:31:56