我是靠谱客的博主 落寞书包,最近开发中收集的这篇文章主要介绍10004 - Bicoloring//bfs,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

分析:因为这道题只给了两种颜色,所以可以投机取巧的用bfs做,判断用木有两个结点的level相同。不过貌似就是这样做,有Four Color Map Theorem所以给了四种颜色绝对是可以滴。那么就考虑三种颜色。现在木考虑到,谁能告诉我啊!(晚上回去想想吧,囧)

下面是本题AC代码:

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 210;
int map[maxn][maxn];
int nodeLevel[maxn];
bool vis[maxn][maxn];
bool Vis[maxn];
int q[maxn*maxn];
int n,m;
void bfs(int S)
{
int front = 1;
int rear = 1;
q[front] = S;
Vis[S] = true;
while(front <= rear)
{
int v = q[front++];
for(int i = 0;i < n;i++)
{
if(map[v][i])
{
if(!Vis[i])
{
Vis[i] = true;
vis[v][i] = true;
nodeLevel[i] = nodeLevel[v] + 1;
q[++rear] = i;
}
if(nodeLevel[v] == nodeLevel[i] && !vis[i][v])
{
printf("NOT BICOLORABLE.n");
return;
}
}
}
}
printf("BICOLORABLE.n");
return;
}
int main()
{
while(scanf("%d",&n) && n)
{
memset(vis,false,sizeof(vis));
memset(Vis,false,sizeof(Vis));
memset(map,0,sizeof(map));
memset(nodeLevel,0,sizeof(nodeLevel));
scanf("%d",&m);
for(int i = 0;i < m;i++)
{
int p,q;
scanf("%d%d",&p,&q);
map[p][q] = map[q][p] = 1;
}
bfs(0);
}
return 0;
}


最后

以上就是落寞书包为你收集整理的10004 - Bicoloring//bfs的全部内容,希望文章能够帮你解决10004 - Bicoloring//bfs所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部