读书人

八皇后有关问题~

发布时间: 2012-03-29 12:53:12 作者: rapoo

八皇后问题~~~~~~~~~~~~~~~~~

C/C++ code
#include<stdio.h>#define N 8#define FALSE 0#define TRUE 1 int chess[N]={0};int ifput(int inrow,int incol);int put(int row);void print();main(){put(0);getchar();return 0;}int put(int row){int col,s;for(col=0;col<N;col++){    chess[row]=col;    if(row==0||ifput(row,col)==1)    {    if(row==N-1)        {           print();            col++;            continue;        }        s=put(row+1);        if(s==0)        {            col++;            continue;        }        else        {            break;        }    }}if(col==N){    return FALSE;}else{    return TRUE;}}int ifput(int inrow,int incol){int i,j;for(i=0;i<inrow;i++){    if(chess[i]==incol)        return 0;    for(j=0;j<incol;j++)    {        if(chess[inrow]==i)            return 0;        if(((i-inrow)==(j-incol)||(i-inrow)==(incol-j))&&chess[i]==j)             return 0;    }}return 1;}void print(){int i;for(i=0;i<N;i++)printf("%d",chess[i]);}


不知道为什么输出不了,,,看了好久好久啊,,,,,麻烦各位了

[解决办法]
你的判断条件不正确:改下
C/C++ code
int put(int row){    int col;    if (row == N)        print();    else        for (col = 0; col < N;col++)        {             chess[row] = col;            if (ifput(row, col))                put(row + 1);        }    return 0;}
[解决办法]
C/C++ code
int ifput(int inrow,int incol){    int i,j;    for(i=0;i<inrow;i++)    {        if(chess[i]==incol)            return 0;        if (abs(inrow - i) == abs(chess[i] - chess[inrow]))            return 0;    }    return 1;}
[解决办法]
要加个头文件math.h,if (abs(inrow - i) == abs(chess[i] - chess[inrow]))这个是判断是不是在一条斜线上

读书人网 >C语言

热点推荐