求此八皇后C程序的流程图~~急~~要流程图~~

来源:百度知道 编辑:UC知道 时间:2024/09/28 08:45:03
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define QUEENS 8

//!记录解的序号的全局变量。
int iCount = 0;

//!记录皇后在各列上的放置位置的全局数组。
int Site[QUEENS];

//!递归求解的函数。
void Queen(int n);

//!输出一个解。
void Output();

//!判断第n个皇后放上去之后,是否有冲突。
int IsValid(int n);

/*----------------------------Main:主函数。----------------------------*/
void main()
{
//!从第0列开始递归试探。
Queen(0);

//!按任意键返回。
getch();
}

/*-----------------Queen:递归放置第n个皇后,程序的核心!----------------*/
void Queen(int n)
{
int i;

//!参数n从0开始,等于8时便试出了一个解,将它输出并回溯。
if(n == QUEENS)
{
Output();
return;
}

//!n还没到8,在第n列的各个行上依次试探。
for(i = 1 ; i <= QUEENS ; i++)
{
//!在该列的第i行上放置皇后。
Site[n] = i;

八皇后问题:
问题提出: 8×8的棋盘上放置8个皇后,在同一横线、竖线、对角线上会产生冲突,
求不产生冲突即8个皇后都安全的放置方法。
这里改变NCOUNT即可以求出n皇后的n×n棋盘的放置方法
张可彦: kyany@sina.com
*/
#include "stdio.h"

#define NCOUNT 8
int nArray[NCOUNT][NCOUNT];

// 判断一个点是否是安全点
bool IsSafe(int i,int j)
{
int x=i,y=j;
while(1)
{
x -= 1;
if( x<0 )break;
y -= 1;
if( y<0)break;
if( nArray[x][y] == 1)return false;
}
x=i;
y=j;
while(1)
{
x += 1;
if( x>NCOUNT-1 )break;
y += 1;
if( y >NCOUNT-1 )break;
if( nArray[x][y] == 1)return false;
}
x=i;
y=j;
while(1)
{
x -=1;
if( x<0 )break;
y +=1;
if( y>NCOUNT-1 )break;
if( nArray[x][y] == 1)return false;
}
x=i;
y=j;
while(1)
{
x +=1;
if( x>NCOUNT-1 )break;
y-=1;
if( y<0 )break;
if( nArray[x][