zoukankan      html  css  js  c++  java
  • 八皇后问题 DFS,回溯剪枝 //http://poj.grids.cn/practice/2698

    就是DFS,一出现同行,同列或同对角线,就不往下搜了,就叫剪枝,然后一到出现一个可行解,输出来。记得再递归调用回退的时候要“恢复现场”

    贴代码:

    View Code
     1 //http://poj.grids.cn/practice/2698
     2 #include <cstdio>
     3 #include <cstring>
     4 bool a[10][10];
     5 int cur=0;
     6 //开始考虑放第i行
     7 void DFS(int i)
     8 {
     9     int j,k;
    10     if(i == 8)//得到一个可行解
    11     {
    12         printf("No. %d\n",++cur);
    13         for(j=0; j<8; ++j)
    14         {
    15             for(k=0; k<8; ++k)
    16             {
    17                 if(k!=0) printf(" ");
    18                 printf("%d",a[k][j]);
    19             }
    20             puts("");
    21         }
    22         return ;
    23     }
    24     for(j=0; j<8; ++j)
    25     {
    26         bool flag = true;//判断这样放是否可行
    27         for(k=0; k<i &&flag; ++k)
    28         {
    29             for(int t=0; t<8; ++t)
    30             {
    31                 if(a[k][t] && (t == j|| t-j == k-i || t-j == i-k))
    32                 {
    33                     flag = false;
    34                     break;
    35                 }
    36             }
    37         }
    38         if(flag)//可行,就这样放
    39         {
    40             a[i][j] = 1;
    41             DFS(i+1);
    42             a[i][j] =0;//回退了的时候恢复现场
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     memset(a,0,sizeof(a));
    49     DFS(0);
    50     return 0;
    51 }
  • 相关阅读:
    concurrent-锁
    字符串查找字符串
    指针作为函数返回值
    数组名作为函数参数
    指针和函数
    多级指针
    指针数组
    指针运算
    指针和数组
    const修饰的指针类型
  • 原文地址:https://www.cnblogs.com/allh123/p/3015832.html
Copyright © 2011-2022 走看看