这是一个八皇后问题的c语言源码,求大牛解释一下每一行的意思 5
#include<stdio.h>#defineNUM8intnCount;boolCheck(int*pSet,intnCol,intnTestRow){for(int...
#include <stdio.h>
#define NUM 8
int nCount;
bool Check(int *pSet, int nCol, int nTestRow)
{
for(int i=0;i<nCol;i++)
{
if(pSet[i] == nTestRow)
return false;
if(pSet[i]-i == nTestRow-nCol)
return false;
if(pSet[i]+i == nTestRow+nCol)
return false;
}
return true;
}
void Queen(int *pSet,int nCol)
{
if(nCol == NUM)
{
for(int i=0;i<NUM;i++)
printf("(%d:%d)",i,pSet[i]);
nCount ++;
printf("\n");
}
for(int i=0;i<NUM;i++)
{
if(Check(pSet,nCol,i))
{
pSet[nCol] = i;
Queen(pSet,nCol+1);
}
}
}
main()
{
int pSet[NUM];
nCount = 0;
Queen(pSet,0);
printf("Tolal solutions: %d\n", nCount);
getchar();
} 展开
#define NUM 8
int nCount;
bool Check(int *pSet, int nCol, int nTestRow)
{
for(int i=0;i<nCol;i++)
{
if(pSet[i] == nTestRow)
return false;
if(pSet[i]-i == nTestRow-nCol)
return false;
if(pSet[i]+i == nTestRow+nCol)
return false;
}
return true;
}
void Queen(int *pSet,int nCol)
{
if(nCol == NUM)
{
for(int i=0;i<NUM;i++)
printf("(%d:%d)",i,pSet[i]);
nCount ++;
printf("\n");
}
for(int i=0;i<NUM;i++)
{
if(Check(pSet,nCol,i))
{
pSet[nCol] = i;
Queen(pSet,nCol+1);
}
}
}
main()
{
int pSet[NUM];
nCount = 0;
Queen(pSet,0);
printf("Tolal solutions: %d\n", nCount);
getchar();
} 展开
展开全部
#include <stdio.h>
#define NUM 8
int nCount;
bool Check(int *pSet, int nCol, int nTestRow)//判断是否可以在nCol行的nTextRow位置放置新的皇后
{
for(int i=0;i<nCol;i++)
{
if(pSet[i] == nTestRow) //判断有没有其他行(pSet[i])皇后与TextRow行皇后同列
return false;
if(pSet[i]-i == nTestRow-nCol) //判断有没有其他行(pSet[i])皇后与TextRow行皇后在右45度斜线上共线
return false;
if(pSet[i]+i == nTestRow+nCol)//判断有没有其他行(pSet[i])皇后与TextRow行皇后在左45度斜线上共线
return false;
}
return true;//此位置可以放置新皇后
}
void Queen(int *pSet,int nCol)//放置新皇后的函数
{
if(nCol == NUM)//nCol==NUM则棋盘已经被设置8个皇后,输出地图,nCount++
{
for(int i=0;i<NUM;i++)
printf("(%d:%d)",i,pSet[i]);
nCount ++;
printf("\n");
}
for(int i=0;i<NUM;i++)//设置棋盘上的皇后
{
if(Check(pSet,nCol,i))//判断nCol行的第i位是否可放置新的皇后
{
pSet[nCol] = i;
Queen(pSet,nCol+1);//可放置则放置新皇后后进行第nCol+1行的皇后放置
}
}
}
main()
{
int pSet[NUM];
nCount = 0;
Queen(pSet,0);
printf("Tolal solutions: %d\n", nCount);
getchar();
}
:孩纸你看这个是你要的答案么,我们家琛琛给的~~
#define NUM 8
int nCount;
bool Check(int *pSet, int nCol, int nTestRow)//判断是否可以在nCol行的nTextRow位置放置新的皇后
{
for(int i=0;i<nCol;i++)
{
if(pSet[i] == nTestRow) //判断有没有其他行(pSet[i])皇后与TextRow行皇后同列
return false;
if(pSet[i]-i == nTestRow-nCol) //判断有没有其他行(pSet[i])皇后与TextRow行皇后在右45度斜线上共线
return false;
if(pSet[i]+i == nTestRow+nCol)//判断有没有其他行(pSet[i])皇后与TextRow行皇后在左45度斜线上共线
return false;
}
return true;//此位置可以放置新皇后
}
void Queen(int *pSet,int nCol)//放置新皇后的函数
{
if(nCol == NUM)//nCol==NUM则棋盘已经被设置8个皇后,输出地图,nCount++
{
for(int i=0;i<NUM;i++)
printf("(%d:%d)",i,pSet[i]);
nCount ++;
printf("\n");
}
for(int i=0;i<NUM;i++)//设置棋盘上的皇后
{
if(Check(pSet,nCol,i))//判断nCol行的第i位是否可放置新的皇后
{
pSet[nCol] = i;
Queen(pSet,nCol+1);//可放置则放置新皇后后进行第nCol+1行的皇后放置
}
}
}
main()
{
int pSet[NUM];
nCount = 0;
Queen(pSet,0);
printf("Tolal solutions: %d\n", nCount);
getchar();
}
:孩纸你看这个是你要的答案么,我们家琛琛给的~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询