| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2011 人关注过本帖
标题:八皇后 循环实现
只看楼主 加入收藏
来生再见
Rank: 1
来 自:江西省抚州市
等 级:新手上路
威 望:1
帖 子:39
专家分:9
注 册:2015-9-13
结帖率:40%
收藏
 问题点数:0 回复次数:2 
八皇后 循环实现
程序代码:

#include <stdio.h>
#define N 8

char board2[N + 2][N + 2];
int QueenPos2[N];
int count2 = 0;
//定义一个方向的结构体
typedef struct _Tag_Pos
{
    int xpos;
    int ypos;
}Pos2;

Pos2 pos2[3] = { { -1, -1 }, { -1, 0 }, { -1, 1 } };

void init2(void);
void display2(void);
int check2(int x, int y);
void find2(void);

int main(int argc, char *argv[])
{
    init2();
    find2();
    return 0;
}
//初始化
void init2(void)
{
    for (int i = 0; i < N;i++)
    {
        QueenPos2[i] = 1;
    }
    for (int i = 0; i < N + 2; i++)
    {
        for (int j = 0; j < N + 2; j++)
        {
            if ((i == 0) || (i == N + 1))
            {
                board2[i][j] = '#';
            }
            else if ((j == 0) || (j == N + 1))
            {
                board2[i][j] = '#';
            }
            else
            {
                board2[i][j] = ' ';
            }
        }
    }
}

//输出
void display2(void)
{
    for (int i = 0; i < N + 2; i++)
    {
        for (int j = 0; j < N + 2; j++)
        {
            printf("%c", board2[i][j]);
        }
        printf("\n");
    }
}
//检测某个位置是不是可以放置皇后
int check2(int i, int j)
{
    int ret = 1;
    for (int p = 0; p < 3; p++)
    {
        int ni = i;
        int nj = j;

        while (ret && (board2[ni][nj] != '#'))
        {
            ni = ni + pos2[p].xpos;
            nj = nj + pos2[p].ypos;

            ret = ret && (board2[ni][nj] != '*');
        }
    }

    return ret;
}

//找出所有的皇后
void find2(void)
{
    //
    for (int i = 1; i <= N;)
    {
        int flag = 1;
        for (int j = QueenPos2[i]; j <= N;j++)
        {
            //检测一下可不可以安置一个皇后
            if (check2(i,j))
            {
                QueenPos2[i] = j;
                board2[i][j] = '*';
                flag = 0;
                break;
            }
        }
        //如果flag==1?表示没找到,否则找到
        if (flag)
        {
            i--;
            board2[i][QueenPos2[i]] = ' ';
            QueenPos2[i]++;
        }
        else
        {
            i++;
        }
        getchar();
    }
    display2();
}


帮忙看一下怎么回事啊,我没有使用递归来实现,使用了循环来实现,但是就是得不到结果
搜索更多相关主题的帖子: color 
2015-11-27 22:19
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
//如果flag==1?表示没找到,否则找到
if (flag)
{
    QueenPos2[i] = 1;
    i--;
    board2[i][QueenPos2[i]] = ' ';
    QueenPos2[i]++;
}
else
{
    i++;
}
//getchar();


另外你的QueenPos2越界了


[fly]存在即是合理[/fly]
2015-11-30 09:59
来生再见
Rank: 1
来 自:江西省抚州市
等 级:新手上路
威 望:1
帖 子:39
专家分:9
注 册:2015-9-13
收藏
得分:0 
回复 2楼 azzbcc
终于有人会我帖子了,谢谢啊

重新开始,努力
2015-11-30 19:18
快速回复:八皇后 循环实现
数据加载中...
 
   



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

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