yuexia_wrp 2015-06-13 15:01 采纳率: 0%
浏览 1532
已结题

八皇后 递归方法 遇到奇怪问题。。。

record[0][0] 未被赋值的情况下,前后两次查看,值不一样,运行结果的前两行即是record[0][0],一次是1,一次是0

 #include<stdio.h>
#include<stdlib.h>
int control[8][8]={0};
int record[92][8]={0};
int count=0;
int floor=1;
int tmp[8];
int p;
void setControlArea(int rowid,int colid){
    int i,j;
    for(i=rowid+1;i<8;i++) control[i][colid]++; 
    for(i=rowid+1,j=colid+1;i<8,j<8;i++,j++) control[i][j]++;
    for(i=rowid+1,j=colid-1;i>=0,j>=0;i++,j--) control[i][j]++; //只管下面两条线 
} 
void releaseControlArea(int rowid,int colid){
    int i,j;
    for(i=rowid+1;i<8;i++) control[i][colid]--; 
    for(i=rowid+1,j=colid+1;i<8,j<8;i++,j++) control[i][j]--;
    for(i=rowid+1,j=colid-1;i>=0,j>=0;i++,j--) control[i][j]--; //只管下面两条线 
}
//递归解法
void find(){
    int j;
    if(floor==8){
        for(j=0;j<8;j++){
            if(control[7][j]==0) {
            tmp[7]=j+1;
            for(p=0;p<8;p++){
                record[count][p]=tmp[p];
                if(count==0&&p==0) printf("\nhahaha  %d\n",record[count][p]);
            }
            count++;
            break;}
        }
        floor--;
        return;
    }
    else if(floor==1){
        for(j=0;j<8;j++){
           tmp[0]=j+1;           
           setControlArea(0,j);
           floor++;
           find();
           releaseControlArea(0,j);
        }
        floor--;
        return;
    }
    else{
        for(j=0;j<8;j++){
           if(control[floor-1][j]==0){
             tmp[floor-1]=j+1;
             setControlArea(floor-1,j);
             floor++;
             find();
             releaseControlArea(floor-1,j);             
           }
        }
        floor--;                
    }   
}
int main(){
    int i,j;
    find();
    printf("\n%d\n",record[0][0]);
    for(i=0;i<count;i++){
        for(j=0;j<8;j++){
           printf("%d",record[i][j]);                   
        }
        printf("\n");
    }
    printf("%d",count);
    system("pause");
} 

图片说明

  • 写回答

1条回答 默认 最新

  • WorldMobile 2015-06-14 14:03
    关注

    record[0][0] 要赋初始值,否则可以会导致一些莫名其妙的问题,因为里的数据可能是随机的

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog