#include<bits/stdc++.h>
using namespace std;
string a[60];
int main()
{
int n,i,j,k;
cin >>n;
for (j=0;j<n;j++)cin >>a[0][j];
for (i=1;i<n;i++)
{
for (j=0;j<n;j++)cin >>a[i][j];
j=0;bool f=false;int p=0,q=0;
for (j=0;j<n;j++)
{
if (a[i][j]=='1')
{
while (a[i][j]=='1')
{
if (a[i-1][j]=='1' )f=not f;j++;
}
if (f==true)
{
while (j<n && a[i][j]=='0'){
a[i][j]='2';
j++;
}
}
j--;
}
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout <<a[i][j]<<' ';
cout <<"\n";
}
return 0;
}
by emmmm_lq @ 2018-11-25 20:29:52
//希望更丰富的展现?使用Markdown
我用的$(0,0)$开始搜,附上我很丑的码风供你参考一下吧
```cpp
#include<iostream>
#include<cstdio>
int a[100][100],n;
bool vis[100][100],f;
void dfs(int,int);
void paint();
using namespace std;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
dfs(0,0);
paint();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(f) printf(" %d",a[i][j]);
else printf("%d",a[i][j]),f=1;
f=0;
printf("\n");
}
return 0;
}
void dfs(int x,int y)
{
if(vis[x][y]||a[x][y]||x>n+1||y>n+1||x<0||y<0) return;
vis[x][y]=1;
dfs(x+1,y);
dfs(x,y+1);
dfs(x-1,y);
dfs(x,y-1);
}
void paint()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!a[i][j]&&!vis[i][j]) a[i][j]=2;
}
```
odk
by UniC @ 2018-11-25 20:39:54
你这个string用的很玄学啊,建议你用int比较稳,数字矩阵就没必要上string……
by UniC @ 2018-11-25 20:41:23
看不到你的数组开到哪里了,是不是太小了(我没看你的代码)
by UniC @ 2018-11-25 20:42:06