欢迎来到皮皮网官网

【php 源码使用】【dali2源码】【建站之星保存源码】c队列源码_队列源代码

时间:2024-11-25 07:22:47 来源:jquery 源码学习

1.c����Դ��

c队列源码_队列源代码

c����Դ��

       #include "stdafx.h"

       #include "stdio.h"

       #include "malloc.h"

       #define MAX 8

       static int Queen[8][8];

       static int a=1;

       typedef struct

       {

        int *elem;

        int top;

       }ColStack;//栈:存放每一行放置皇后的队代码列号

       void InitQueen()

       {

        int i,j;

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

        {

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

        {

        Queen[i][j] = 0;

        }

        }

       }

       int InitStack(ColStack &CS)//初始化栈

       {

        CS.elem = (int *)malloc(MAX*sizeof(int));

        if(!CS.elem) return 0;

        CS.top = -1;

        return 1;

       }

       int Push(ColStack &CS, int e)//进栈

       {

        if(CS.top >= 8) return 0;

        CS.top++;

        CS.elem[CS.top] = e;

        return 1;

       }

       int Pop(ColStack &CS, int &e)//退栈

       {

        if(CS.top == -1)return 0;

        e = CS.elem[CS.top];

        CS.top--;

        return 1;

       }

       int Back(ColStack &CS,int &e)//回溯

       {

        Pop(CS,e);

        Queen[CS.top+1][e] = 0;

        if(e == 7 && CS.top == -1)

        {

        return 0;

        }

        if(e == 7 && CS.top != -1)

        {

        Back(CS,e);

        }

        return 1;

       }

       int OK(int i, int j)//检查(i,j)上能否放棋子

       {

        int k, m;

        for(k = i; k >= 0; k--)//检查同列

        {

        if(Queen[k][j] == 1) return 0;

        }

        k = i; m = j;

        while(k >= 0 && m >= 0)

        {

        if(Queen[k][m] == 1) return 0;

        k--; m--;

        }

        k = i; m = j;

        while(k >= 0 && m < 8)

        {

        if(Queen[k][m] == 1) return 0;

        k--;m++;

        }

        return 1;

       }

       //进入本函数时,在8*8棋盘前i-1行已放置了互不攻

       // 击的列源列源php 源码使用i-1个棋子。现从第 i 行起继续为后续棋子选择

       // 满足约束条件的码队dali2源码位置。当求得(i>8)的队代码建站之星保存源码一个合法布局

       // 时,输出之。列源列源铁血星球游戏源码

       int queen(int i,码队reversed的源码解析 ColStack &CS, int start)

       {

        int j, k,e;

        if(i>=8)

        {

        printf("第%d种情况:\n",a);

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

        {

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

        {

        if(Queen[j][k] == 0)

        {

        printf("# ");

        }

        else

        {

        printf("@ ");

        }

        }

        printf("\n");

        }

        a++;

        }else

        {

        for(j = start+1; j < 8; j++)

        {

        if(OK(i,j) == 1)

        {

        Queen[i][j]=1;

        Push(CS,j);

        queen(i+1,CS,-1);

        return 1;

        }

        }

        }

        if(j == 8)

        {

        if(Back(CS,e) == 1)

        {

        queen(CS.top+1,CS,e);

        }

        if(Back(CS,e) == 0)

        {

        return 1;

        }

        }

       }

       int main()

       {

        InitQueen();

        ColStack cs;

        InitStack(cs);

        queen(0,cs,-1);

        return 0;

       }

       这是一个八皇后问题,是队代码个典型的出队列、入队列问题

列源列源

精选图文

copyright © 2016 powered by 皮皮网   sitemap