四色问题 天梯 回溯

问题http://codevs.cn/problem/1116/

  1. #include<iostream> 
  2. #include<cstring>
  3. using namespace std;
  4. int arr[8][8];
  5. int n;
  6. int num=0;
  7. int se[8];//代表第几个位置需要放置的颜色 
  8. bool ifcou(int x,int s){//判断第x位置 是否可以放置s颜色 
  9.     for(int j=0;j<n;j++){
  10.         if(arr[x][j]==1&&se[j]==s){
  11.             return false;
  12.         }
  13.     }
  14.     return true;
  15. }
  16.  
  17. void put(int x){
  18.     if(x>=n){
  19.         num++;
  20.         return ;
  21.     } 
  22.     
  23.     for(int i=1;i<=4;i++){
  24.         if(ifcou(x,i)){
  25.             se[x]=i;
  26.             put(x+1);
  27.             se[x]=0;
  28.         }
  29.     }
  30.     
  31. }
  32. int main(){
  33.     cin>>n;    
  34.     memset(se,0,sizeof(se));
  35.     for(int i=0;i<n;i++){
  36.         for(int j=0;j<n;j++){
  37.             cin>>arr[i][j];            
  38.         }
  39.     }
  40.     put(0);
  41.     cout<<num;
  42.     
  43.     
  44.     
  45.     return 0;
  46. }

猜你喜欢

转载自blog.csdn.net/qq_36160277/article/details/81099144