皇后问题 搜索

来源:互联网 发布:.net b2b商城源码 编辑:程序博客网 时间:2024/06/10 05:47

代码实现:

#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;const int maxn=100;int q[maxn];void myqcqueen(int n){    memset(q,0,sizeof(q));    for(int i=1;i<=n;i++)    {        q[i]=1;    }    int i=1;    printf("\n%d queen problem\n",n);    while(1)    {        if(q[i]<=n)        {            int k=1;            while(k<=i-1 && (q[k]-q[i])*(abs(q[k]-q[i])-abs(k-i))!=0)            {                k++;            }            if(k<=i-1)            q[i]=q[i]+1;            else            {                i++;                if(i>n)                {                    for(int j=1;j<=n;j++)                    {                        printf("%d ",q[j]);                    }                    printf("\n");                    q[n]=q[n]+1;                    i=n-1;                }            }        }        else        {            q[i]=1;            i--;            if(i<1)            {                printf("\n");                return ;            }            q[i]=q[i]+1;        }    }}int main(){    myqcqueen(4);    myqcqueen(6);    myqcqueen(7);    myqcqueen(8);    return 0;}

#include <stdio.h>///C#include <stdlib.h>void qcqueen(int n){    int *q;    int i,jt,k,j;    q=(int *)malloc(n*sizeof(int));    for(i=0;i<=n-1;i++)    {        q[i]=0;    }    i=0;    jt=1;    printf("\n%d queen problem\n",n);    while(jt==1)    {        if(q[i]<=n-1)        {            k=0;            while(k<=i-1 && (q[k]-q[i])*(abs(q[k]-q[i])-abs(k-i))!=0)            {                k=k+1;            }            if(k<=i-1) q[i]=q[i]+1;            else            {                i=i+1;                if(i>n-1)                {                    for(j=0;j<=n-1;j++)                    {                        printf("%d ",q[j]+1);                    }                    printf("\n");                    q[n-1]=q[n-1]+1;                    i=n-1;                }            }        }        else        {            q[i]=0;            i=i-1;            if(i<0)            {                printf("\n");                free(q);                return;            }            q[i]=q[i]+1;        }    }}int main(){    qcqueen(4);    return 0;}

#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;void qcqueen(int n){    int *q;    //q=(int *)malloc(n*sizeof(int));    q=new int[n];    for(int i=0;i<=n-1;i++)    {        q[i]=0;    }    int i=0;    int jt=1;    int k;    printf("\n%d queen problem\n",n);    while(jt==1)    {        if(q[i]<=n-1)        {            k=0;            while(k<=i-1 && (q[k]-q[i])*(abs(q[k]-q[i])-abs(k-i))!=0)            {                k=k+1;            }            if(k<=i-1) q[i]=q[i]+1;            else            {                i=i+1;                if(i>n-1)                {                    for(int j=0;j<=n-1;j++)                    {                        printf("%d ",q[j]+1);                    }                    printf("\n");                    q[n-1]=q[n-1]+1;                    i=n-1;                }            }        }        else        {            q[i]=0;            i=i-1;            if(i<0)            {                printf("\n");                //free(q);                delete q;                return;            }            q[i]=q[i]+1;        }    }}int main(){    qcqueen(4);    qcqueen(6);    qcqueen(7);    qcqueen(8);    return 0;}


0 0
原创粉丝点击