数据结构上机作业3:栈——八皇后

问题描述:
用栈来求解N皇后问题
作者:何知令

完成时间:2017年5月21日

代码:

/*
问题描述:
用栈来求解N皇后问题
作者:何知令
完成时间:2017年5月21日
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int data[20];
    int top;
} sqstack;
sqstack st;
void push(int col)//进栈
{
    st.top++;
    st.data[st.top]=col;
}
void pop()//出栈
{
    st.top--;
}
int output(int k,int n)//输出栈内所有元素
{
    int i,j;
    k++;
    printf("第%d个解:\n",k);
    for(i=0; i<n; i++)
    {
        for(j=0; j<st.data[i]; j++);
        printf("<%d,%d> ",i,j);
        for(j=n-1; j>st.data[i]; j--);
    }
    printf("\n");
    return k;
}
int judgement()//判断该位置是否可以排放皇后
{
    int i;
    for(i=0; i<st.top; i++)
        if(st.data[st.top]==st.data[i]||abs(st.data[st.top]-st.data[i])==st.top-i)//如果当前皇后摆放位置与之前摆放的皇后处于同行同列或者同一斜线上则不能摆放在该位置,返回0
            return 0;
    return 1;
}
int placequeen(int row,int k,int n,int a[][n])//排放皇后
{
    int col;
    for(col=0; col<n; col++)
    {
        push(col);
        if(judgement())
        {
            if(row<n-1)
                k=placequeen(row+1,k,n,a);
            else
            {
                k=output(k,n);
            }
        }
        pop();
    }
    return k;
}
int main()
{
    int i,j,n,k=0;
    printf("皇后问题<n<20> n=");
    scanf("%d",&n);
    int a[n][n];
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
            a[i][j]=0;
    printf("%d皇后问题如下:\n",n);
    st.top=-1;
    placequeen(0,k,n,a);
    return 0;
}
程序运行结果展示:

知识点总结:栈,回溯

学习心得:难~慢慢学吧


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值