赞
踩
/*这题后面那个visit的判断有点浪费时间。没有优化好。。后来看了飞神的解题报告,在DFS算法中进行优化
- for(i=0; i<n; i++)
- {
- if(!color[i]&&map[x][i])
- {
- color[i]=-color[x];
- if(dfs(i,n))
- return 1;
- else
- return 0;
- }
- else if(color[i]&&map[x][i]&&color[x]==color[i])
- {
- return 0;
- }
- }
*/
- #include<iostream>
- #include<memory.h>
- using namespace std;
- int m[210][210];
- int color[210];
- int n;
- void dfs(int x,int n)
- {
- int i;
- for(i=0;i<n;i++)
- {
- if(m[x][i]==1 && !color[i])
- {
- color[i]=-color[x];
- dfs(i,n);
- }
- }
- }
- int main()
- {
- int t,a,b,flag,i,j;
- while(cin>>n && n)
- {
- flag=0;
- memset(m,0,sizeof(m));
- memset(color,0,sizeof(color));
- cin>>t;
- while(t--)
- {
- cin>>a>>b;
- m[a][b]=1;
- m[b][a]=1;
- }
- for(i=0;i<n;i++)
- for(j=0;j<n;j++)
- if(j==n-1)
- cout<<m[i][j]<<endl;
- else
- cout<<m[i][j]<<" ";
- color[0]=1;
- dfs(0,n);
- for(i=0;i<n;i++)
- if(i==n-1) cout<<color[i]<<endl;
- else cout<<color[i]<<" ";
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- {
- if(m[i][j]==1)
- {
- if(color[i]!=color[j])
- continue;
- else
- {
- flag=1;
- break;
- }
- }
- }
- if(flag==1)
- break;
- }
- if(flag==1)
- cout<<"NOT BICOLORABLE."<<endl;
- else
- cout<<"BICOLORABLE."<<endl;
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。