我正在用程序解一道题目,题目是这样的: 国际象棋棋盘8*8方格国际象棋棋盘8*8方格表中,每个要填入1、2、3这三个数字之中的任意一个。是否存在一种填入方式,使每行、每列及两条对角线上八个数字之和各不相等? 以下是我的程序,请大家帮我看看为什么程序运行后长时间无响应却没有“栈溢出”的错误,是不是程序上有问题啊? #include <iostream> #include <iomanip>
using namespace std;
int sum_row(int square[][8],int i); int sum_col(int square[][8],int i);
bool judge(int square[][8]);
void print_square(int suqare[][8]); void gen_square(int square[][8],int i,int j);
void main() { int square[8][8]={0}; gen_square(square,0,0); }
int sum_row(int square[][8],int i) { int j; int sum=0; for(j=0;j<8;j++) { sum += square[i][j]; } return sum; }
int sum_col(int square[][8],int i) { int j; int sum=0; for(j=0;j<8;j++) { sum += square[j][i]; } return sum; }
int sum_left_corner(int square[][8]) { int i,j=0; int sum=0; for(i=0;i<8;i++) { sum += square[i][j]; j++; } return sum; }
int sum_right_conrner(int square[][8]) { int i,j=0; int sum=0; for(i=7;i>=0;i--) { sum += square[j][i]; j++; } return sum; }
void print_square(int square[][8]) { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) { cout << setw(4) << square[i][j]; } cout << endl; } cout << endl; }
bool judge(int square[][8]) { int i,j=0; bool result=true; int sum[18]={0}; for(i=0;i<8;i++) { sum[2*j] = sum_row(square,i); sum[2*j+1] = sum_col(square,i); j++; } sum[16] = sum_left_corner(square); sum[17] = sum_left_corner(square);
for(i=0;i<17;i++) { for(j=i+1;j<18;j++) { if(sum[i] == sum[j]) { result=false; break; } } if(!result) { break; } }
return result; }
void gen_square(int square[][8],int i,int j) { if(i < 8 && j < 8) { int k; for(k=1;k<4;k++) { square[i][j] = k; if(j < 8) j++; else { if (i < 8) { i++; j = 0; } } gen_square(square,i,j); } } else { if(judge(square)) { print_square(square); } } }
[此贴子已经被作者于2005-2-21 13:28:22编辑过]