| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 321 人关注过本帖
标题:求教:写八皇后时遇到的奇葩问题
只看楼主 加入收藏
zyuce
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2012-11-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
求教:写八皇后时遇到的奇葩问题
不知道为啥截不了图了。只能上代码了。
程序代码:
#include<stdio.h>
#define N 8
typedef struct
{
    int n;
    int row;
    int line;
}AnswerType;
AnswerType answer[N];
typedef enum
{
    notoccued = 0,
    occued = 1
}Ifoccued;
Ifoccued RowOccued[N];
Ifoccued LeftTop_RightDown[2*N-1];
Ifoccued LeftDown_RightTop[2*N-1];
void print();
int num;
void start(int LineIndex)
{
    for(int RowIndex=0;RowIndex<8;RowIndex++)
    {
        if(RowOccued[RowIndex]==notoccued&&LeftTop_RightDown[RowIndex-LineIndex+N-1]==notoccued
            &&LeftDown_RightTop[RowIndex+LineIndex]==notoccued)
        {
            RowOccued[RowIndex]=occued;
            LeftTop_RightDown[RowIndex-LineIndex+N-1]=occued;
            LeftDown_RightTop[RowIndex+LineIndex]=occued;
            answer[LineIndex].row=RowIndex;
            answer[LineIndex].line=LineIndex;
            if(LineIndex==7)
            { 
                num++;
                answer[0].n++;
                print();
                RowOccued[N]=notoccued;
                LeftTop_RightDown[2*N-1]=notoccued;
                LeftDown_RightTop[2*N-1]=notoccued;
            }else
            {
                start(LineIndex+1);
            }
        RowOccued[RowIndex]=notoccued;
        LeftTop_RightDown[RowIndex-LineIndex+N-1]=notoccued;
        LeftDown_RightTop[RowIndex+LineIndex]=notoccued;
        }
    }
}
void print()
{
    printf("第%d个结果为:",num);
    for(int i=0;i<N;i++)
    {
        printf("[%d,%d] ",answer[i].line+1,answer[i].row+1);
    }
    printf("\n");
}
int main()
{
    num=0;
    answer[0].n=0;
    start(0);
    return 0;
}

注意倒数第14行的printf("第%d个结果为:",num);   根据我的设想应该是输出第1个结果为...一直到输出第92个结果为
但实际是输出了92个第一个结果为

然后我将整形计数器num换成了answer结构体中的变量n,代码如下
程序代码:
#include<stdio.h>
#define N 8
typedef struct
{
    int n;
    int row;
    int line;
}AnswerType;
AnswerType answer[N];
typedef enum
{
    notoccued = 0,
    occued = 1
}Ifoccued;
Ifoccued RowOccued[N];
Ifoccued LeftTop_RightDown[2*N-1];
Ifoccued LeftDown_RightTop[2*N-1];
void print();
int num;
void start(int LineIndex)
{
    for(int RowIndex=0;RowIndex<8;RowIndex++)
    {
        if(RowOccued[RowIndex]==notoccued&&LeftTop_RightDown[RowIndex-LineIndex+N-1]==notoccued
            &&LeftDown_RightTop[RowIndex+LineIndex]==notoccued)
        {
            RowOccued[RowIndex]=occued;
            LeftTop_RightDown[RowIndex-LineIndex+N-1]=occued;
            LeftDown_RightTop[RowIndex+LineIndex]=occued;
            answer[LineIndex].row=RowIndex;
            answer[LineIndex].line=LineIndex;
            if(LineIndex==7)
            { 
                num++;
                answer[0].n++;
                print();
                RowOccued[N]=notoccued;
                LeftTop_RightDown[2*N-1]=notoccued;
                LeftDown_RightTop[2*N-1]=notoccued;
            }else
            {
                start(LineIndex+1);
            }
        RowOccued[RowIndex]=notoccued;
        LeftTop_RightDown[RowIndex-LineIndex+N-1]=notoccued;
        LeftDown_RightTop[RowIndex+LineIndex]=notoccued;
        }
    }
}
void print()
{
    printf("第%d个结果为:",answer[0].n);
    for(int i=0;i<N;i++)
    {
        printf("[%d,%d] ",answer[i].line+1,answer[i].row+1);
    }
    printf("\n");
}
int main()
{
    num=0;
    answer[0].n=0;
    start(0);
    return 0;
}

与第一段代码唯一不同之处就是把倒数第14行改成printf("第%d个结果为:",answer[0].n);
输出就对了 是从1到92
我不明白为什么第一段代码结果输出的全是1
求解!谢谢!
搜索更多相关主题的帖子: 皇后 奇葩 
2012-12-20 19:15
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
表示确实一样,都是1-92,楼主准备换编译器吧


[fly]存在即是合理[/fly]
2012-12-20 19:30
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:0 
吧num初始化试一试呢?
不初始化总有可能得到很奇葩的结果
2012-12-20 19:37
快速回复:求教:写八皇后时遇到的奇葩问题
数据加载中...
 
   



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

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