PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » 数据结构和算法 » 关于八皇后算法的具体思维和过程
本页主题: 关于八皇后算法的具体思维和过程 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

phpwhy

头衔:总管 总管
该用户目前不在线
级别: 管理员
精华: 3
发帖: 633
威望: 550 点
金钱: 5560 PYMB
贡献值: 0 点
在线时间:12(小时)
注册时间:2005-09-15
最后登录:2008-06-09

关于八皇后算法的具体思维和过程


#include<stdio.h>
#include<math.h>
#define N  8
int x[N]={0},sum=0;//x表示第i个皇后在i行x
void output()
{
    int i;
    printf("No*%d*\n",sum);
    for(i=0;i<N;i++)
        printf("%4d",x);
    putchar('\n');
}
int place(int k)
{
    int i=0;
    for(i=0;i<k;i++)
        if(abs(i-k)==abs(x-x[k])||x==x[k])
            return 0;       
        return 1;
       
}
void  Search(int n)
{
    int i;

    if(n>=N)
    {   
        sum++;
        output();
    }
    else
        for(i=0;i<N;i++)
        {
            x[n]=i;
            if(place(n))
                Search(n+1);
        }
}

void main()
{
    Search(0);
}
你适合当程序员吗?给想学编程的朋友
http://www.phpwhy.com/read.php?tid=5258&page=1&toread=1

  远程免费试听http://www.phpwhy.com/bbs/read.php?tid=4514
学校照片见 http://www.phpwhy.com/bbs/read.php?tid=4091


PHP培训,网站建设咨询
联系电话: 0571-85980046 ,0571-86704910
联系人:何老师
qq:310172
地址:杭州下沙4号路物美西子阳光星城1座501室智达电脑培训中心
顶端 Posted: 2007-06-01 20:22 | [楼 主]
phpwhy

头衔:总管 总管
该用户目前不在线
级别: 管理员
精华: 3
发帖: 633
威望: 550 点
金钱: 5560 PYMB
贡献值: 0 点
在线时间:12(小时)
注册时间:2005-09-15
最后登录:2008-06-09


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define MAX 100
int pos[MAX]={0};//位置
int n=4;//n为四代表四皇后,为八代表八皇后
void Display(){
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            if(pos==j) printf("* ");
            else printf("0 ");
            printf("\n");
    }
    printf("\n");
}
int OK(int i,int j){//判断布局合法
    int k,flag;
    flag=1;
    for(k=1;k<i;k++)
        if(pos[k]==j||abs(j-pos[k])==abs(i-k)) {
            flag=0;
            break;
        }
    return flag;   
}
void Trial(int i,int n){
    int j;
    if(i>n) Display();
    for(j=1;j<=n;j++)
        if(OK(i,j)) {pos=j;Trial(i+1,n);pos=0;}
}
int main(){
    Trial(1,n);
    return 0;
}
你适合当程序员吗?给想学编程的朋友
http://www.phpwhy.com/read.php?tid=5258&page=1&toread=1

  远程免费试听http://www.phpwhy.com/bbs/read.php?tid=4514
学校照片见 http://www.phpwhy.com/bbs/read.php?tid=4091


PHP培训,网站建设咨询
联系电话: 0571-85980046 ,0571-86704910
联系人:何老师
qq:310172
地址:杭州下沙4号路物美西子阳光星城1座501室智达电脑培训中心
顶端 Posted: 2007-06-01 20:27 | 1 楼
phpwhy

头衔:总管 总管
该用户目前不在线
级别: 管理员
精华: 3
发帖: 633
威望: 550 点
金钱: 5560 PYMB
贡献值: 0 点
在线时间:12(小时)
注册时间:2005-09-15
最后登录:2008-06-09


#include<stdio.h>
#include<windows.h>
#define MAX 100
int x[MAX];
int OK(int pos,int n){
    int i;
    for(i=1;i<=n-1;i++)
        if(x==pos||pos-x==n-i||pos-x==i-n)
            return 0;
        return 1;
}
void Output(int n){
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            if(j==x) printf("*");
            else printf("&");
        printf("\n");
    }
    printf("\n");
}
void NQueen(int n){
    int i;
    x[1]=0;
    i=1;
    while(i>0){
            x=x+1;
            while(x<=n&&!OK(x,i))//剪枝
                x=x+1;
            if(x<=n){
                if(i==n)
                    Output(n);
                if(i<n){//放下一个
                    i=i+1;
                    x=0;
                }
            }
            else i=i-1;
    }
}
int main(){
    int n;
    long tstart,tend;
    while(1){
        scanf("%d",&n);
        tstart=GetTickCount();
        NQueen(n);
        tend=GetTickCount();
        printf("Time is %ldms\n",tend-tstart);
    }
    return 0;
}
你适合当程序员吗?给想学编程的朋友
http://www.phpwhy.com/read.php?tid=5258&page=1&toread=1

  远程免费试听http://www.phpwhy.com/bbs/read.php?tid=4514
学校照片见 http://www.phpwhy.com/bbs/read.php?tid=4091


PHP培训,网站建设咨询
联系电话: 0571-85980046 ,0571-86704910
联系人:何老师
qq:310172
地址:杭州下沙4号路物美西子阳光星城1座501室智达电脑培训中心
顶端 Posted: 2007-06-01 20:27 | 2 楼
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » 数据结构和算法

现在时间:07-04 07:21 Copyright © 2006 phpwhy.com 版权所有
浙ICP备05060669号 我要啦免费统计

点击这里给我发消息关于我们 - 合作联系