69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int d[8][8];
int n;
void queen8(int L) {
int x,y;
if (8==L) {
n++;
printf("%d\n",n);
for (y=0;y<8;y++) {
for (x=0;x<8;x++) {
// printf("%d",d[y][x]);
if (d[y][x]) printf("■");
else printf("□");
}
printf("\n");
}
return;
}
for (x=0;x<8;x++) {
for (y=0;y<L;y++) {
if ( d[y][x ]
|| (x-(L-y)>=0 && d[y][x-(L-y)])
|| (x+(L-y)< 8 && d[y][x+(L-y)]))
break;
}
if (y>=L) {
d[L][x]=1;
queen8(L+1);
d[L][x]=0;
}
}
}
int main() {
int y,x;
for (y=0;y<8;y++) {
for (x=0;x<8;x++) {
d[y][x]=0;
}
}
queen8(0);
return 0;
}
#include<stdio.h> //八皇后
int n=1;
int fun1(int b[])
{
int j,m;
for(j=0;j<7;j++)
for(m=j+1;m<8;m++)
if((b[m]-m)==(b[j]-j)||b[m]==b[j]||(b[m]+m)==(b[j]+j))return 0;
return 1;
}
int fun(int b[])
{
int i,j;
for(b[7]=0;b[0]<8;b[7]++)
{
if(b[0]>=8)return 0;
for(i=7;i>0;i--)
if(b[i]>=8){b[i]=0;b[i-1]++;}
if(fun1(b))
{
printf("%d\n",n++);
for(i=0;i<8;i++,printf("\n"))
for(j=0;j<8;j++)
if(b[i]!=j)printf("%2c",220);
else printf("%2c",5);
}
}
}
int main()
{
int b[8]={0};
fun(b);
getchar();
return 0;
}
#include<stdio.h>
#include<stdlib.h>
void initState(int p[]);
void print(int p[]);
int numOfPositive(int p[],int);
void moveAway(int p[], int, int);
int select(int p[], int ,int);
int main()
{
int step =0;
int selectPosition1;
int selectPosition;
int roomAvailable;
int state[64];
initState(state);
print(state);
roomAvailable = numOfPositive(state, 64);
while(roomAvailable > 0)
{
sleep(100);
printf("%d",roomAvailable);
srand( time(NULL) );
selectPosition1 = rand()%roomAvailable;
selectPosition = select(state,64,selectPosition1);
moveAway(state,64,selectPosition);
roomAvailable = numOfPositive(state, 64);
printf("%d",roomAvailable);
step++;
}
printf("%d",step);
return 0;
}
void initState(int p[])
{
int i;
int j;
int k =0 ;
for(i= 0; i<8; i++){
for(j=0; j<8; j++)
{
p[k]= 10*i + j;
k++;
}
}
}
void print(int p[])
{
int k = 0;
while (k <64 )
{
printf("%2d ",p[k]);
if((k+1)%8==0)
printf("\n");
k++;
}
}
int numOfPositive(int p[],int m)
{
int i;
int j = 0;
for(i= 0; i<m; i++)
{
if(p[i]>-1)
j++;
}
return j;
}
void moveAway(int p[], int m, int n)
{
int i;
int j = p[n]/10 ;
for(i= 0; i<m; i++)
{
int k = abs(p[i]-p[n]);
int j = p[n]%10 ;
if(k%10==0||k%9==0||k%11==0)
p[i]=-1;
if(p[i]/10 == j)
p[i]=-1;
}
}
int select(int p[],int m,int n)
{
int i;
int j = -1;
int k;
for(i= 0; i<m; i++)
{
if(p[i]>-1)
j++;
if(j == n)
{
k = p[j];
break;
}
}
return k;
}