?? n皇后問題.txt
字號:
//#include "stdafx.h"
#include<stdio.h>
#define M 6
char chessboard[M][M];
int QueenPlace(int LocX,int LocY);
int N_Queens(int LocX,int LocY,int Queens)
{
int i,j;
int Result = 0;
if(Queens == M)
return 1;
else
if(QueenPlace(LocX,LocY))
{
chessboard[LocX][LocY] = 'Q';
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
Result += N_Queens(i,j,Queens+1);
if(Result>0)
break;
}
if(Result > 0)
return 1;
else
{
chessboard[LocX][LocY] = ' ';
return 0;
}
}
else
return 0;
}
int QueenPlace(int LocX,int LocY)
{
int i,j;
if(chessboard[LocX][LocY] != ' ')
return 0;
for(j=LocY-1;j>=0;j--)
if(chessboard[LocX][j] != ' ')
return 0;
for(j=LocY+1;j<M;j++)
if(chessboard[LocX][j] != ' ')
return 0;
for(i=LocX-1;i>=0;i--)
if(chessboard[i][LocY] != ' ')
return 0;
for(i=LocX+1;i<M;i++)
if(chessboard[i][LocY] != ' ')
return 0;
i = LocX-1;
j = LocY-1;
while(i>=0 && j>=0)
if(chessboard[i--][j--] != ' ')
return 0;
i = LocX+1;
j = LocY-1;
while (i<M && j>=0)
if(chessboard[i++][j--] != ' ')
return 0;
i = LocX -1;
j = LocY +1;
while (i>=0 && j<M)
if(chessboard[i--][j++] != ' ')
return 0;
i = LocX+1;
j = LocY+1;
while (i<M && j<M)
if(chessboard[i++][j++] != ' ')
return 0;
return 1;
}
void main()
{
int i,j;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
chessboard[i][j] = ' ';
int num1=0,num2=0,num3=0;
N_Queens(num1,num2,num3);
while(chessboard[num1][num2]==' ')
{
N_Queens(num1,++num2,num3);
if(num2>=M)
break;
}
printf("The graph of 8 Queens on the chessboard .\n");
printf(" 0 1 2 3 4 5 6 7 \n");
printf(" +---+---+---+---+---+---+---+---+\n");
for(i=0;i<M;i++)
{
printf("%d|",i);
for(j=0;j<M;j++)
printf(" %c |",chessboard[i][j]);
printf("\n +---+---+---+---+---+---+---+---+\n");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -