因为黑边可能会出现在 四周 这样的话就不是太好处理了 所以想到了 将已经给的图扩大一下 将四周再围上 一圈然后开始搜索 思路出来了
然后就直接开始 搜索 上去就选择了 写着方便的 深搜 因为数据量比较大的原因 果断超时 ........
既然写了就 附上深搜代码吧 留个纪念 以后省的浪费时间
#include<stdio.h> #include<string.h> int a[1444][970],n,m; void DFS(int i,int j) // 传进去 坐标 并且开始搜索 遇到 非0 的时候 将其变成 0 , 遇到 0的时候 不作处理 return 回去 { if(!(i>=0&&i<=m+1&&j>=0&&j<=n+1)) // 不在范围的话 退回一步 return ; else //在范围的话 { if(a[i][j]==0) return ; else a[i][j]=0; } DFS(i+1,j); DFS(i,j+1); DFS(i,j-1); DFS(i-1,j); } int main() { int t,i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(a,1,sizeof(a)); for(i=1;i<=m;i++) // 高度 for(j=1;j<=n;j++) // 宽度 scanf("%d",&a[i][j]); DFS(0,0); for(i=1;i<=m;i++) // 高度 { for(j=1;j<n;j++) // 宽度 { printf("%d ",a[i][j]); } printf("%d ",a[i][n]); } } return 0; }