C语言 求批注

来源:百度知道 编辑:UC知道 时间:2024/06/03 23:46:14
#include <stdio.h>
#include <stdlib.h>

int ispresentincolumn(int a[],int b){
int i; //正在处理的元素下标,表示前i-1个元素已符合要求,正在处理第i个元素
for(i=0;a[i]!=-1;i++)
if(a[i]==b) return 1;
if(a[i]==-1) return 0;
}

int ispresentindiagonal(int a[],int n,int b){
int i;
for(i=0;a[i]!=-1;i++)
if(((a[i]-b)==(n-i))||((b-a[i])==(n-i))) return 1;
if(a[i]==-1) return 0;
}

int isok(int a[],int n,int b){
return (!ispresentindiagonal(a,n,b))&&(!ispresentincolumn(a,b));
}

void display(int a[],int *n,int m){
printf("Case No. %d: ",*n);
int i;
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}

int nq(int a[],int n,int b,int *i,int m){
if(n==m){
display(a,i,m);
(*i)++;
return 1;
}
else{
if(isok(a,n,b)){
a[n]=b;
int j,k;
for(j=0;j<m;j++)

n皇后问题!!

#include <stdio.h>
#include <stdlib.h>

int ispresentincolumn(int a[],int b){ //函数判断b列是否已经有皇后了
int i; //正在处理的元素下标,表示前i-1个元素已符合要求,正在处理第i个元素
for(i=0;a[i]!=-1;i++) //从a开始判断,a存放列值
if(a[i]==b) return 1; //如果已经存在皇后 则返回1 代表该列有皇后
if(a[i]==-1) return 0; //如果不存在皇后 则返回0 代表不冲突
}

int ispresentindiagonal(int a[],int n,int b){ 判断对角线是否已经有皇后
int i;
for(i=0;a[i]!=-1;i++)
if(((a[i]-b)==(n-i))||((b-a[i])==(n-i))) return 1; //对角线有皇后 返回1
if(a[i]==-1) return 0; //对角线无皇后则返回0
}

int isok(int a[],int n,int b){//返回是否可以放置皇后
return (!ispresentindiagonal(a,n,b))&&(!ispresentincolumn(a,b));
//如果列值可以放 并且
}

void display(int a[],int *n,int m){//输出第n种放置的方案
printf("Case No. %d: ",*n); //方案n
int i;
for(i=0;i<m;i++) //列的循环控制
printf("%d ",a[i]); //输出方案n的列值编号
printf("\n");