八皇后代码
八皇后:
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。
代码
#include <stdio.h>
#include <stdlib.h>
int a[9][9]={0};
void output()
{
int i,j;
for(i=1;i<=8;i++)
{
for(j=1;j<=8;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n********************\n");
}
int check(int i,int k)
{
int t,j,j1;
t=0;
for(j=1;j<=i-1;j++)
{
for(j1=1;j1<=8;j1++)
if(abs(j-i)==abs(k-j1)&&a[j][j1]==1) //在斜线上且有值
t=1;
if(a[j][k]==1) //在垂直线上且有值
t=1;
}
if(t==0)
return 1;
else
return 0;
}
void try(int i)
{
int k;
if(i>=9)
return ;
for(k=1;k<=8;k++)
if(check(i,k)==1)
{
a[i][k]=1;
if(i==8)
output();
else
try(i+1);
a[i][k]=0;
}
}
int main()
{
try(1);
return 0;
}