| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1634 人关注过本帖, 1 人收藏
标题:八皇后
只看楼主 加入收藏
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏(1)
 问题点数:0 回复次数:11 
八皇后
谁能给俺个  ' 八皇后'  的程序啊 ???!!
搜索更多相关主题的帖子: 皇后 
2006-05-16 20:21
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

#include<stdio.h>
#include<math.h>

const int NUM=8;

char model[]="12345678";
char solve[]="???????? ";

int main()
{
void queen(int);
printf("the 92 solutions of Eight Queen's problem: \n");
queen(0);
printf("\n");
return 0;
}

void queen(int n)
{ static tot=0;
int i=NUM;
char ch,*p,*q;
if(n<i)
for(p=model;i>0;i--,p++)
{
int j;
q=solve;
ch=*p;
if(ch==0)continue;
for(j=n;j>0;j--)
if(abs(*q++-ch)==j)break;
if(j>0)continue;
*q=ch;
*p=j;
queen(n+1);
*p=ch;
}
else
{
printf(solve);
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-16 20:26
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
这么快,5分钟搞定!
老大,佩服!

奋斗改变一切!!
2006-05-16 20:30
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
老大,能给俺点注释不,看的吃力呀!

奋斗改变一切!!
2006-05-16 21:13
vaxyne
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-16
收藏
得分:0 
#include "stdio.h"
int a[8],b[24],c[24],d[24];
int i, k,t=0;
void print()
{
t++;
printf(" %d",t);
for (k=0;k<8;k++)
printf(" %d",a[k]);
printf("\n");
}
void tryput(int i)
{
int j;
for (j=0;j<8;j++)
{/*每个皇后都有8种可能位置*/
if ((b[j]==0) &&(c[i+j]==0)&& (d[i-j]==0))/*判断位置是否冲突*/
{
a[i]=j;/*摆放皇后*/
b[j]=1;/*宣布占领第J行*/
c[i+j]=1; /*占领两个对角线*/
d[i-j]=1;
if (i<8)
tryput(i+1);/*8个皇后没有摆完,递归摆放下一皇后*/
else
print();/*完成任务,打印结果*/
b[j]=0; /*回溯*/
c[i+j]=0;
d[i-j]=0;
}
}
}
void main()
{
for( k=0;k<24;k++)
{/*数据初始化*/
b[k]=0;
c[k]=0;
d[k]=0;
}
tryput(1);/*从第1个皇后开始放置*/
}
2006-05-16 22:46
vaxyne
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-16
收藏
得分:0 

共有92种解,由于8*8棋盘关于对角线,中轴对称,所以共有12种本质不同的解,但是如何能求出12种本质不同的解,我不会,哪位大侠能帮帮做个程序,求出12种本质不同的解,小弟在这里先谢谢了~~~~

2006-05-16 22:52
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

下次你再直接要程序严惩!

人和动物的区别是有主观能动性

留着baidu/google干什么?


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-16 22:54
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(vaxyne)共有92种解,由于8*8棋盘关于对角线,中...
以下是引用vaxyne在2006-5-16 22:52:00的发言:

共有92种解,由于8*8棋盘关于对角线,中轴对称,所以共有12种本质不同的解,但是如何能求出12种本质不同的解,我不会,哪位大侠能帮帮做个程序,求出12种本质不同的解,小弟在这里先谢谢了~~~~

朋友,您怎么知道只有12个独立解的?如果是自己“悟”出来的就太好了。盼望这方面有一定研究的朋友帮帮他的忙。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-17 16:14
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
版主教训的是!
下次俺自己先搞!
实在搞不定再请教大家!

奋斗改变一切!!
2006-05-17 17:10
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 


#include <math.h>
#include <stdio.h>
#include <conio.h>
#define N 8
int local[N];


void show_result()
{
int i;
for(i=0; i<N; i++)
printf("%d%d ",i,local[i]);
printf("\n");
}

int check_cross(int n)
{
int i;
for (i=0; i<n; i++)
{
if (local[i] == local[n] || (n-i) == abs(local[i]-local[n]))
return 1;
}
return 0;
}

void put_chess(int n)
{
int i;
for (i=0; i<N; i++)
{
local[n] = i;
if (!check_cross(n))
{
if (n == N-1) show_result();
else put_chess(n+1);
}
}
}

int main(void)
{
put_chess(0);
getch();

return 0;
}


奋斗改变一切!!
2006-05-17 18:03
快速回复:八皇后
数据加载中...
 
   



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

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