| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:8*8格里放八个皇后,黄竖斜都不能有两个皇后,如何设计程序.
只看楼主 加入收藏
夏阳港
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-11
收藏
 问题点数:0 回复次数:0 
8*8格里放八个皇后,黄竖斜都不能有两个皇后,如何设计程序.

主要是要看哪样简单?
难得写的话说下思路就可以了.
谢谢.
下面是我第一次做出的结果,却觉得太复杂了.
#include<stdio.h>
char row(long n);
char xie1(long n);
char xie2(long n);
void prqueen(long n);
void main()
{
long n;
int count=0;
for(n=0;n<(1<<24);n++)
{
if(row(n))continue;
if(xie1(n))continue;
if(xie2(n))continue;
prqueen(n);
count++;
}
printf("There is %d answers in total.!\n",count);
}

char row(long n) //计算每行的数都不相等,有相等的则返回1;
{
int a1,a2,a3;
for(a1=0;a1<8;a1++)
{ a3=0;
for(a2=0;a2<8;a2++)
{
if(a1==((n&((1<<3*(a2+1))-(1<<3*a2)))>>(3*a2)))a3++;
if(a3>1)break;
}
if(a3>1)break;
}
if(a3>1)return (1);
else return (0);
}

char xie1(long n) //计算向左上斜的斜线上的最多存在一个数。否则返回1;
{
int b1,b2,j;
char a[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(b1=0;b1<8;b1++)
{
b2=((n&((1<<3*(b1+1))-(1<<3*b1)))>>(3*b1));
j=7+b1-b2;
a[j]+=1;
if(a[j]>1)break;
}
return(a[j]>1);
}

char xie2(long n) //计算向右上斜的斜线上的最多存在一个数。否则返回1;
{
int b1,b2,j;
char a[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(b1=0;b1<8;b1++)
{
b2=( (n&((1<<3*(b1+1))-(1<<3*b1)))>>(3*b1) );
j=b1+b2;
a[j]+=1;
if(a[j]>1)break;
}
return(a[j]>1);
}

void prqueen(long n) //打印。
{
int i,j;
char queen[8][8]={
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}};
for(j=0;j<8;j++)
{
i= ( (n&((1<<3*(j+1))-(1<<3*j)))>>(3*j) );
queen[i][j]=1;
}
printf("*******************\n");
for(i=0;i<8;i++)
{
printf("* ");
for(j=0;j<8;j++)
{
if(queen[i][j]==1)printf("Q ");
else printf(" ");
}
printf("*\n");
}
printf("*******************\n");
return;
}

搜索更多相关主题的帖子: 格里 黄竖斜 皇后 设计 
2007-04-21 14:02
快速回复:8*8格里放八个皇后,黄竖斜都不能有两个皇后,如何设计程序.
数据加载中...
 
   



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

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