8皇后问题 C语言

来源:百度知道 编辑:UC知道 时间:2024/06/22 13:19:11
帮我看一下,那个递归 问题出在哪?

#include <stdio.h>
#define N 8 /*定义列数*/
int arcflag[N]={0};
int incflag1[2*N-1]={0};
int incflag2[2*N-1]={0};
int qm[N][N]={0};

int checkarcoss (int j) //该列有没有被占领
{
if(arcflag[j]==0)
return 1; //没有别占领,可以放置皇后的可选列
return 0;
}

//该丿斜有没有被占领
int checkincline1 (int i,int j)
{
if (incflag1[i+j]==0)
return 1; //没有别占领,可以放置皇后的可选丿斜斜
return 0;
}

int checkincline2(int i,int j) //判断 捺斜有没有被占领
{
if (incflag2[i-j+7]==0)
return 1; //没有别占领,可以放置皇后的可选捺斜列
return 0;
}

void queen(int n)
{ int i,j;

if(n>=N)
{
for ( i=0;i<N;i++)
{
for (j=0;j<N;j++)
printf("%d &q

回溯时写的不对

if (checkarcoss(j)&&checkincline1(n,j)&&checkincline2(n,j)) //可以作好皇后候选位置
{
printf("kao\n");

qm[n][j]=1; //对该皇后占领的位置标记
arcflag[j]=1;
incflag1[n+j]=1;
incflag2[n-j+N-1]=1;

queen(n+1);

qm[n][j]=0;
arcflag[j]=0;
incflag1[n+j]=0;
incflag2[n-j+N-1]=0;
}

看懂了么?

我并没有太仔细看你的程序,我也写过一个8皇后,希望你看了之后会有点想法。

#include <iostream>
#include <vector>

using namespace std;

const int size = 8; //是几就是几皇后
bool use[ size ][ size ];
vector <int> pace ( size );
bool solution = true;

void work( int t )
{
if ( solution && t <= size )
{
if ( t == size )
{
int i, j;
for ( i = 0; i < size; i++ )
{
for ( j = 0; j < size; j++ )
if ( j == pace[ i ] )
cout << 1;
else
cout <<