强迫症的小懒人 2018-03-20 07:54 采纳率: 16.7%
浏览 2364
已结题

C语言八皇后问题的算法问题

为什么 运行不出来

#include

int chess[8][8];
int count = 0;

int judge(int r,int c)
{
int i;
int j;

for(i=0;i<8;i++)

{
if(chess[i][c])
return 0;
}
for(i=r,j=c;i>=0&&j>=0;i--,j--)
{
if(chess [i][j])
return 0;
}
for(i=r,j=c;i>=0&&j<8;i--,j++)
{
if(chess[i][j])
return 0;
}
return 1;

}

void eightQueen()
{
int stack[10];
int top = 0;
int i,k;

while(top>=0)
    for(;stack[top]<8; stack[top]++)
    {

        k = stack[top];
        if(judge(top,k))
        {
            chess[top][k] = 1;
            break;
        }
    }
    if (top == 7 && stack[top]<8)
    {
        count++;
        stack[top]++;
    }
    else if(stack[top] < 8 && top <7)
    {
        top++;
    }
    else if (stack[top] == 8 && top <=7)
    {
        for (i=0;i<8;i++)
        {
            chess[top][i] = 0;
            chess[top-1][i] = 0;

        }
        stack[top--] = 0;
        stack[top]++;
    }

}
void main()
{
int i ;
int j ;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess[i][j] = 0;
}
}

eightQueen();
printf("八皇后的个数%d",count);

}

  • 写回答

6条回答 默认 最新

  • 键盘舞者113 博客专家认证 2018-03-20 10:59
    关注
         #include <stdio.h>  
        #include <stdlib.h>  
        #define N 8  
    
        int column[N+1];//同栏是否有皇后  
        int rup[2*N +1];//右上至左下是否有皇后  
        int lup[2*N +1];//左上至右下是否有皇后  
        int queen[N+1] = {0};  
        int num ;//解答编号  
    
        void backtrack(int);//递回求解  
    
        main(void)  
        {  
            int i;  
            num = 0;  
            for(i=1;i<=N;i++)  
                column[i] = 1;  
    
            for(i=1;i<=2*N;i++)  
                rup[i] = lup[i] = 1;  
    
            backtrack(1);  
    
            system("pause");  
            return 0;  
        }  
    
        void showAnswer()  
        {  
            int x,y;  
            printf("\n 解答 %d\n",++num);  
            for (y=1;y<=N;y++)  
            {  
                for (x=1;x<=N;x++)  
                {  
                    if(queen[y] == x)  
                        printf("Q");  
                    else  
                        printf("K");  
                }  
                printf("\n");  
            }  
        }  
    
        void backtrack(int i)  
        {  
            int j;  
            if(i > N)  
                showAnswer();  
            else  
                for (j=1;j<=N;j++)  
                {  
                    if(column[j] == 1 && rup[i+j] == 1 &&lup[i-j+N] == 1){  
                        queen[i] = j;  
                        //设定为占用  
                        column[j] = rup[i+j] = lup[i-j+N] = 0;  
                        backtrack(i+1);  
                        column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角递归完后进行下一个位置的递归运算                                                                                         
                    }  
                }  
        }  
    
    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型