几皇后问题,由n控制,在这里暂且设置为经典的八皇后。
然后显示出来的是一个女生化的棋盘的模样,
所有结果均打印出来了。(一共92种,笑脸为皇后)如下图
//八皇后问题 #include<stdio.h> static int sum=0; #define n 8 static int queen[n]; static char p[n][n]; void init() //数组初始化 { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { p[i][j]=3; } } } void show() //打印图形,笑脸代表皇后 { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%c ",p[i][j]); } printf("\n"); } printf("\n"); } void search(int hang) { if(hang==n) { sum++; show(); } else for(int i=0;i<n;i++)//列 { int flag=1; queen[hang]=i;//尝试b把第hang行的皇后放在第i列 for(int j=0;j<hang;j++)//检查是否和之前的皇后冲突 { if(queen[hang]==queen[j]||hang-queen[hang]==j-queen[j]||hang+queen[hang]==j+queen[j]) { flag=0; break; } } if(flag) //满足条件 { p[hang][i]=1; search(hang+1); p[hang][i]=3;//清除放错的皇后 } } } int main() { init(); search(0); printf("%d",sum); return 0; }
原文:http://www.cnblogs.com/tt-t/p/5073863.html