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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料