sjy_2023 @ 2023-12-09 21:51:20
题目
思路:
先认为所有的'0'都应该被修改,并且把它修改成了'2';
边角上的'2'其实本来不应该被修改的,那我们把他们改回去 ,改成'0'
然后来寻找与这些零相邻的'2',它们其实也是被改错了的 把它们改回去
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n;
int a[35][35];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
queue <int> qx;
queue <int> qy;
int flag[35][35];
int x,y;
int main()
{
memset(flag,0,sizeof(flag));
scanf("%d",&n);
for(int i=0;i<n;i++)
{ for(int k=0;k<n;k++)
{ scanf("%d",&a[i][k]);
if( a[i][k]==0 && i!=0 && k!=0 )
{ a[i][k]==2; }
}
}
printf("\n");
qx.push(1);
qy.push(1);
flag[1][1]=1;
while(!qx.empty())
{ x=qx.front();qx.pop();
y=qy.front();qy.pop();
for(int i=0;i<4;i++)
{ if( x+dx[i]>=0 && x+dx[i]<n && y+dy[i]>=0 && y+dy[i]<n && flag[x+dx[i]][y+dy[i]]!=1 )
{ qx.push(x+dx[i]);
qy.push(y+dy[i]);
flag[x+dx[i]][y+dy[i]]=1;
}
}
if( a[x][y]==2 )
{ if( a[x-1][y]==0 || a[x+1][y]==0 || a[x][y-1]==0 || a[x][y+1]==0 )
{ a[x][y]=0; }
}
}
for(int i=0;i<n;i++)
{ for(int k=0;k<n;k++)
{ printf("%d ",a[i][k]); }
printf("\n");
}
return 0;
}
太晚了先睡觉去了 明天回复 玄关
by qweradf @ 2023-12-09 22:04:33
@sjy_2023 边角除了i=0,k=0还有i=n-1和k=n-1
by sjy_2023 @ 2023-12-09 22:08:39
@qwqer233 但是加上了还是一样
by dienter @ 2023-12-09 22:13:43
@sjy_2023 稍等一下,有一堆令人难蚌的问题,我待会写一个详细的给你
by sjy_2023 @ 2023-12-09 22:16:50
@dienter 好的谢谢
by dienter @ 2023-12-09 22:26:03
@sjy_2023
for(int i=0;i<n;i++)
{ for(int k=0;k<n;k++)
{ scanf("%d",&a[i][k]);
if( a[i][k]==0 && i!=0 && k!=0 )
{ a[i][k]==2;//经典
}
}
}
scanf("%d",&n);
for(int i=0;i<n;i++)
{ for(int k=0;k<n;k++)
{ scanf("%d",&a[i][k]);
if( a[i][k]==0 && i!=0 && k!=0 )
{ a[i][k]==2; }
}
}
printf("\n");//你为什么要在这加一个换行?
其次就是你的思路有问题,例如:
(2,2)
1 1 1 0
1 2 2 0
1 0 0 0
↓
(2,3)
1 1 1 0
1 2 2 0
1 0 0 0
↓
1 1 1 0
1 2 0 0
0 0 0 0
建议学学正宗BFS
by dienter @ 2023-12-09 22:28:45
@sjy_2023 补一下刚才那张图
(2,2)
1 1 1 0
1 2 2 0
1 0 0 0
0 0 0 0
↓
(2,3)
1 1 1 0
1 2 2 0
1 2 2 0
0 0 0 0
↓
1 1 1 0
1 2 0 0
1 2 2 0
0 0 0 0
...
(2,2)没有正常更改
by sjy_2023 @ 2023-12-10 07:09:31
@dienter 这个是输出看着方便。
by sjy_2023 @ 2023-12-10 07:24:10
@dienter 好像理解了,谢谢。
by sjy_2023 @ 2023-12-10 07:35:26
@dienter 你的意思是要从边缘有0的地方开始搜索吗?
by sjy_2023 @ 2023-12-10 08:19:33
@dienter @qwqer233 AC了,谢谢。