八皇后问题~~~~~~~~~~~~~~~~~
- 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]))这个是判断是不是在一条斜线上