当前位置:   article > 正文

UVA OJ Bicoloring 10004_ojbi

ojbi

/*这题后面那个visit的判断有点浪费时间。没有优化好。。后来看了飞神的解题报告,在DFS算法中进行优化
  1. for(i=0; i<n; i++)
  2.     {
  3.         if(!color[i]&&map[x][i])
  4.         {
  5.             color[i]=-color[x];
  6.             if(dfs(i,n))
  7.                 return 1;
  8.             else
  9.                 return 0;
  10.         }
  11.         else if(color[i]&&map[x][i]&&color[x]==color[i])
  12.         {
  13.             return 0;
  14.         }
  15.     }
*/
  1. #include<iostream>
  2. #include<memory.h>
  3. using namespace std;
  4. int m[210][210];
  5. int color[210];
  6. int n;
  7. void dfs(int x,int n)
  8. {
  9. int i;
  10. for(i=0;i<n;i++)
  11. {
  12. if(m[x][i]==1 && !color[i])
  13. {
  14. color[i]=-color[x];
  15. dfs(i,n);
  16. }
  17. }
  18. }
  19. int main()
  20. {
  21. int t,a,b,flag,i,j;
  22. while(cin>>n && n)
  23. {
  24. flag=0;
  25. memset(m,0,sizeof(m));
  26. memset(color,0,sizeof(color));
  27. cin>>t;
  28. while(t--)
  29. {
  30. cin>>a>>b;
  31. m[a][b]=1;
  32. m[b][a]=1;
  33. }
  34. for(i=0;i<n;i++)
  35. for(j=0;j<n;j++)
  36. if(j==n-1)
  37. cout<<m[i][j]<<endl;
  38. else
  39. cout<<m[i][j]<<" ";
  40. color[0]=1;
  41. dfs(0,n);
  42. for(i=0;i<n;i++)
  43. if(i==n-1) cout<<color[i]<<endl;
  44. else cout<<color[i]<<" ";
  45. for(i=0;i<n;i++)
  46. {
  47. for(j=0;j<n;j++)
  48. {
  49. if(m[i][j]==1)
  50. {
  51. if(color[i]!=color[j])
  52. continue;
  53. else
  54. {
  55. flag=1;
  56. break;
  57. }
  58. }
  59. }
  60. if(flag==1)
  61. break;
  62. }
  63. if(flag==1)
  64. cout<<"NOT BICOLORABLE."<<endl;
  65. else
  66. cout<<"BICOLORABLE."<<endl;
  67. }
  68. return 0;
  69. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/947535
推荐阅读
相关标签
  

闽ICP备14008679号