洛谷涂填颜色问题,我用广度遍历圈外的0,时间错误要咋改啊?
#include<iostream>
#include<queue> //广度搜索BFS总是和队列一起使用
using namespace std;
int n;
int eg[35][35];
int fx[4]={-1,1,0,0};//上下
int fy[4]={0,0,-1,1};//左右四个方向
struct node
{
int x;
int y;
};
bool flag=0;
void bfs(int xx,int yy)
{
queue<node>q;
node p,w,v;
p.x=xx;
p.y=yy;
q.push(p);
while(!q.empty()){
w=q.front();
q.pop();
for(int i=0;i<4;i++){
v.x=w.x+fx[i];
v.y=w.y+fy[i];
if(eg[w.x][w.y]==1) continue;//遇到1就停止,换另一个方向
if(w.x<0 || w.x>=n || w.y<0 || w.y>=n){ //范围之外,说明不在闭合圈内
eg[xx][yy]=-1; //对圈外的0进行染色
flag=1;
break;
}
q.push(v);
}
if(flag){
flag=0;///////////////错误!!!!!!!!!!!
break;
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>eg[i][j];
for(int i=0;i<n;i++)//遍历一遍所有点
for(int j=0;j<n;j++){
if(eg[i][j]==0)//只遍历等于0的点
bfs(i,j);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){//安排它
if(eg[i][j]==-1) cout<<0<<" ";
if(eg[i][j]==1) cout<<1<<" ";
if(eg[i][j]==0) cout<<2<<" ";
}
cout<<endl;
}
return 0;
}
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答
为你推荐
- Catch the cow(POJ3278) 编译器上没问题, OJ上一直runtime error?
- java虚拟机中,可达性分析是深度优先还是广度优先
- java
- 2个回答
- c语言中关于指针的一个奇怪现象
- c语言
- 2个回答
- c语言图结构存储问题。。。
- 淘宝面试
- 0个回答
- AI八数码问题 Stack Overflow
- 0个回答
- 人脉系统中的人际距离关系的解决方案?
- 0个回答
- 一个节点数的计算和遍历的问题,广度优先搜索,采用C语言的实现方式
- 数据结构采用邻接表算法实现KAMI问题,怎么实现的,采用的C语言
- 编译时提示变量无大小?
- 3个回答
- 数据结构求二叉树的宽度问题
- 1个回答
- 各位大神,请问怎么求图的遍历?
- 1个回答
- 刚满一年的java开发,接下来应该要知识的广度还是要深度
- java
- 6个回答
- python 广度优先搜索 遍历图中的点
- 2个回答
- 数据结构 图的生成树画法
- 3个回答
- JAVA 生成 用0到9这十个数字 所有的排列组合(0不能再第一个)
- java
- 4个回答
- 五子棋中如何判断提前弃子,是需要遍历棋盘,广度优先遍历么?
- 1个回答
- 我是在校学生,求大神指点
- 2个回答
- c++数据结构有向网相关问题
- c++
- 1个回答
- 求用C语言实现下面问题 新手求指点~谢谢~
- 1个回答