求解释c语言八皇后问题,以下每一行是什么意思

include<stdio.h>#defineN8voidOutput(intbc[][N],int*count){inti;intj;*count=*count+1;p... include <stdio.h>
#define N 8
void Output(int bc[][N],int *count)
{
int i;
int j;
*count=*count+1;
printf("第%d种:\n",*count);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(bc[i][j])
printf("Q");/*在皇后位置打印Q*/
else
printf("0");/*在非皇后位置打印0*/
}
printf("\n\r");
}
system("Pause");/*暂停*/
}
void Queen(int board[][N],int row,int *count)
{
int OK;
int j ;
int i ;
if(row==N)
{
Output(board,count); /*找齐八后,则输出*/
return;
}
for(j=0;j<N;j++)
{
OK=1;
for(i=0;i<row;i++)
{
if((board[i][j])||(j-row+i>=0&&board[i][j-row+i])||(j-i+row<N&&board[i][j-i+row]))
{ /*判断位置*/
OK=0;
break;
}
}
if(OK)
{ /*找到则置标志,并在此基础上继续查找下一个皇后*/
board[row][j]=1;
Queen(board,row+1,count);/*继续递归*/
board[row][j]=0;
}
}
}

void main()
{
int pad[N][N];
int count=0;
int i ,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
pad[i][j]=0;/*将棋牌中所有位置置为0进行初始化*/
}
}
Queen(pad,0,&count);/*开始递归过程,对各种方案检查*/
printf("共有%d种方案",count);
}
展开
 我来答
冰火梦幻
2011-07-06 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:416万
展开全部
include <stdio.h>
#define N 8
void Output(int bc[][N],int *count)
{
int i;
int j;
*count=*count+1;
printf("第%d种:\n",*count);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(bc[i][j])
printf("Q");/*在皇后位置打印Q*/
else
printf("0");/*在非皇后位置打印0*/
}
printf("\n\r");
}
system("Pause");/*暂停*/
}

// 查找第row行,行号从0到N-1
void Queen(int board[][N],int row,int *count)
{
int OK;
int j ;
int i ;
if(row==N) /*查找第N行表示0~N-1行都查完了*/
{
Output(board,count); /*找齐八后,则输出*/
return;
}
for(j=0;j<N;j++) /*遍历第row行的第0列到第N-1列,j为列号*/
{
OK=1; /*先设置为“成功”,如果中途出现冲突才改成“失败”*/
for(i=0;i<row;i++) /*检查第0行到第row-1行是否和当前行i列j有冲突*/
{
if((board[i][j])||(j-row+i>=0&&board[i][j-row+i])||(j-i+row<N&&board[i][j-i+row])) /*如果第i行第j列有皇后(同一列)或者同一对角线*/
{ /*判断位置*/
OK=0; /*设置为“失败”*/
break; /*已经冲突了就不用继续判断了*/
}
}
if(OK) /*查完0~row-1行都没有冲突*/
{ /*找到则置标志,并在此基础上继续查找下一个皇后*/
board[row][j]=1; /*设置当前位置为“有皇后”*/
Queen(board,row+1,count);/*继续递归第row+1行*/
board[row][j]=0; /*设置当前位置(row, j)为“无皇后”,从而便于下一轮将第row行的皇后放在第j+1列上*/
}
}
}

void main()
{
int pad[N][N];
int count=0;
int i ,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
pad[i][j]=0;/*将棋牌中所有位置置为0进行初始化*/
}
}
Queen(pad,0,&count);/*开始递归过程,对各种方案检查*/
printf("共有%d种方案",count);
}
dengnai07
2011-07-06 · TA获得超过801个赞
知道答主
回答量:296
采纳率:0%
帮助的人:91.9万
展开全部
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪C语言中,图形的存取可用如下标准函数实现: size=imagesize(x1,y1,x2,y
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式