图论 染色问题
//判断图中两种颜色是否可以对每个结点进行着色,每两个点颜色不同#include <iostream>#include<cstdio>#include<cstring>#define MAX 100using namespace std;int v,e;int g[MAX][MAX];int color[MAX];void createGraph(){ int start,end; memset(g,0,sizeof(g)); memset(color,0,sizeof(color)); scanf("%d%d",&v,&e); while(e--) { scanf("%d%d",&start,&end); g[start][end]=1; g[end][start]=1; }}//用1或者-1来填满节点bool dfs(int n,int c){ color[n]=c; for(int i=1;i<=v;i++) { //在n到i有边的情况下:if(g[n][i]!=0){//如果n到i点有边,并且邻接点染相同颜色就返回false if(color[i]==c)return false;//如果n到i点有边,但是还未染色,就对i点染色-cif(color[i]==0 && !dfs(i,-c)){return false;}} } return true;}void solve(){ for(int i=1;i<=v;i++) { //遍历每个点,如果还有点没有染色,就对它进行染色 if(color[i]==0) { if(!dfs(i,1)) { printf("NO!\n"); return; } } } printf("YES!\n");}int main(){ createGraph(); solve(); printf("\n");printf("每一点的染色情况:\n"); for(int i=1;i<=v;i++) { printf("%d\t",color[i]); } return 0;}