标题:[求助]恐怖啊,好像陷入无限递归,大家帮忙看看。
取消只看楼主
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
 问题点数:0 回复次数:3 
[求助]恐怖啊,好像陷入无限递归,大家帮忙看看。

我正在用程序解一道题目,题目是这样的: 国际象棋棋盘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编辑过]

搜索更多相关主题的帖子: int 递归 国际象棋 square sum 
2005-02-21 12:40
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 

#include <stdio.h> #include <conio.h>

#define COL 8

int sum_row(int square[][COL],int i); int sum_col(int square[][COL],int i); int sum_left_corner(int square[][COL]); int sum_right_corner(int square[][COL]);

int judge_equal(int square[][COL]);

void print_square(int square[][COL]); void convert_square(int box[],int square[][COL]); void gen_square(int box[],int pos,int size);

int total;

void main() { int box[COL*COL]={0}; total=0; gen_square(box,0,COL*COL); printf("Total=%d\n",total);

getch(); }

int sum_row(int square[][COL],int i) { int j; int sum=0; for(j=0;j<COL;j++) { sum+=square[i][j]; } return sum; }

int sum_col(int square[][COL],int i) { int j; int sum=0; for(j=0;j<COL;j++) { sum+=square[j][i]; } return sum; }

int sum_left_corner(int square[][COL]) { int i,j=0; int sum=0; for(i=0;i<COL;i++) { sum+=square[i][j]; j++; } return sum; }

int sum_right_corner(int square[][COL]) { int i,j=0; int sum=0; for(i=COL-1;i>=0;i--) { sum+=square[j][i]; j++; } return sum; }

int judge_equal(int square[][COL]) { int i,j=0; int sum[COL*2+2]; int result=1; for(i=0;i<COL;i++) { sum[2*j]=sum_row(square,i); sum[2*j+1]=sum_col(square,i); j++; }

sum[COL*2+1]=sum_left_corner(square); sum[COL*2+2]=sum_right_corner(square);

for(i=0;i<COL*2+1;i++) { for(j=i+1;j<COL*2+2;j++) { if(sum[i]==sum[j]) { result=0; break; } } if(result==0) { break; } }

return result; }

void print_square(int square[][COL]) { int i,j; for(i=0;i<COL;i++) { for(j=0;j<COL;j++) { printf("%4d",square[i][j]); } printf("\n"); } }

void convert_square(int box[],int square[][COL]) { int i,j,k=0; for(i=0;i<COL;i++) { for(j=0;j<COL;j++) { square[i][j]=box[k]; k++; } } }

void gen_square(int box[],int pos,int size) { if(pos>=0 && pos<size) { int i; for(i=1;i<=3;i++) { box[pos]=i; pos++; gen_square(box,pos,size); pos--; } } else if(pos >= size) { int square[COL][COL]={0}; convert_square(box,square);

if(judge_equal(square)) { print_square(square); printf("\n"); total++; } } } 我做了个新的算法,还是没完没了的递归,就是不出结果。。。。。。。。。。哎。。。。。该怎样才能提高速度。。


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-02-21 18:06
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 
那有没有效率更高一点的方法呢?谢谢。。。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-02-22 09:24
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 
哦,我理解了,谢谢你啊。。。。。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-02-22 19:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-12387-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.158377 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved