C语言用回溯解决八皇后问题

来源:互联网 发布:野兽派有淘宝店吗 编辑:程序博客网 时间:2024/05/19 13:08
/**/  //回溯法实现8皇后问题。共有92种解法,其中包含对称解法。//          GPH 2012-11-04 16:10//         修改时间: 2014/05/05/**/ #include<stdio.h>#include<stdlib.h>static int Queen[9][8];//皇后标记static int a[8]; //记录皇后列的信息static int b[15];//记录主对角线的皇后static int c[15];//记录次对角线的皇后static int Sum;void backtrace(int i){for(int iC = 0;iC < 8;iC++){   //用a[iC]来表示列,i记录行        //列ic,行i。主对角线b,次对角线c// 如(2,2),(3,3)都是b[0],(1,3)(3,1)都是c[4]if(a[iC] == 0 && b[i-iC+8] == 0 && c[i+iC] == 0){                                     //不冲突Queen[i][iC] = 'o';                 //放置a[iC] = 1;b[i-iC+8] = 1;c[i+iC] = 1;if(i < 7)backtrace(i+1);else{printf("第%d种情况:\n",++Sum);                for(int j = 0;j < 8;j++){for(int l = 0;l < 8;l++)printf("%c ",Queen[j][l]);printf("\n");}printf("\n");//getchar();}            Queen[i][iC] = '*';     //重置a[iC] = 0;b[i-iC+8] = 0;c[i+iC] = 0;}//if}//for}//backtraceint main(){for(int i = 0;i < 8;i++)    {        a[i] = 0;        for(int j = 0;j < 8;j++)            Queen[i][j]='*';}for(int i = 0;i < 15;i++)b[i] = c[i] = 0;    backtrace(0);    printf("共%d种排法\n",Sum);//system("pause");} 

0 0
原创粉丝点击