这段程序可以运行。是C语言皇后问题、麻烦高手帮我把这段程序后面注释一下,我看不太懂。谢谢。

作者&投稿:荤标 (若有异议请与网页底部的电邮联系)
c语言皇后问题的源程序和注释~

#include
#include

enum Status {TRUE,FALSE};//枚举状态
int matrix[8][8];//2位矩阵
int a[8],b[15],c[15];//按行设置标志位
int count;//统计个数

//初始化函数
void init()
{
for(int i=0;i<8;i++){
for(int j=0;j<8;j++)
matrix[i][j]=0; //矩阵置0
a[i]=-1; //标志位置-1
}
for(i=0;i<15;i++)
b[i]=c[i]=0;//标志位置0
count=0;//统计个数置0
}

//矩阵输出
void show(){
printf("
");
for(int i=0;i<8;i++){
for(int j=0;j<8;j++)
printf("%d ",matrix[i][j]);
printf("
");
}
}

//判断是否可以放置,TRUE可以;FALSE不可以
Status isAvailable(int row,int column){
if(a[column]!=-1||b[row+column]==1||c[7-(column-row)]==1)//当前列被放置,或者该列所在的行和所在列存在放置,不可以放置
return FALSE;
for(int i=0;i<8;i++)
if(a[i]==row)//当前列为行号,不可以放置
return FALSE;
return TRUE;
}

//重置矩阵所在行和列,进行局部清零
void reset(int row,int column){
matrix[row][column]=b[row+column]=c[7-(column-row)]=0;
a[column]=-1;
}

//如果可以放置,置所在的坐标位置为1
void set(int row,int column){
matrix[row][column]=b[row+column]=c[7-(column-row)]=1;
a[column]=row;
}

//对当前行的各个列进行递归调用,寻找放置位置
void recurse(int row,int column){
int nextcolumn=column+1;
for(int i=0;i<8;i++){
if(isAvailable(i,nextcolumn)==TRUE){//如果能放置
set(i,nextcolumn); //置1代表放置成功
if(nextcolumn==7){
show();
count++;
}
recurse(i,nextcolumn);
reset(i,nextcolumn);
}
}
}

int main(){
init();
for(int i=0;i<8;i++){
if(isAvailable(i,0)==TRUE){
set(i,0);
recurse(i,0);
reset(i,0);
}
}
printf("
一共有%d个解
",count);
return 0;
}

这谁也看不懂哦,兄弟
就是一个函数的定义,函数变量类型都不清楚
而且C_CENTROID和C_R都是自定义的函数,都不知道干什么的
去头文件 udf.h 里看看先把

# include <stdio.h>
# include <math.h>

int col[8],Left[15],Right[15];
int queen[8];
int n=0;
int sum=0;
int q[20];

void Queens(int,int);
int Place(int,int);

void print(int);

int main()
{
int n;
printf("输入皇后数量\n");
scanf("%d",&n);
Queens(1,n);

return 0;
}
void Queens(int k,int n)
{
int i;
if(n<k)
print(n);
else
{
//每一行从第一列开始遍历
for(i=1;i<=n;i++)
//第k行第i列可以放皇后时,则立马进入下一行,每一行只能一个皇后
if(Place(i,k)==1)
{
//标记
q[k]=i;
//进入下一行
Queens(k+1,n);
}
}
}
int Place(int i,int k) //这个函数就是判定那个位置能不能放皇后啦
{
int j=1;
while(j<k)
{
if((q[j]==i)||abs(q[j]-i)==abs(j-k)) //i列k行不能放时
return 0; //返回结果false
j++;
}
return 1; //能放得话就是TRUE
}
void print(int n)
{
int i;
//打印结果
for(i=1;i<=n;i++)
printf("<%d,%d>\t",i,q[i]);
printf("\n");
}


java跪求:本段程序是一个可多用户连接的socket服务器端程序,现在的问题...
你在实现一个 JFrame(XXXJFrame extends JFrame)就可以了。。在JFrame中高一个JButton给JButton一个事件,在事件中关掉你的ServerSocket 对象。在你的main里面 new XXXJFrame (ServerSocket ss)

若x为int型变量ch为char型变量则下面程序段运行结果是?
printf中的%表示格式化输出,即按照%后面设定的格式输出,所以,每两个%就会忽略前面的那个,而取后面的部分,因此%%d将会输出%d,而%d不是一个格式,所以,不会输出十进制数字,而是在忽略前一个%后,原样输出,即输出k=%d。char数据类型 char型数据是计算机编程语言中只可容纳单个字符的一种基本数据...

单片机 两段程序 交替运行
首先不可以这样编程,其实要完成 多个任务的操作是没有问题的,比如两个任务交替执行 在 同一段程序中就可以了,循环运行就相当于交替,延时程序可以用 中断 加 标志,在执行程序时 计数计时中断标志 时间到执行 需要的任务,否则跳过执行其它任务。

...VFP C),编写这样一段程序,如果运行该程序,可以求出 1*2*3*4*5...
include <stdio.h> include <stdlib.h> int main(int argc, char* argv[]){ int result = 1;int i = 1;for ( i = 1; i < 10; i++ ) { result *= i;printf("%d * ", i);} printf(" = %d\\n", result );system("pause");return 0;} 运行结果:1 * 2 * 3 * 4 ...

我想知道下面这段程序是干嘛的,为什么在MATLAB里运行后出现很多数字矩阵...
就是把两张图片(hall1.jpg,hall2.jpg),并排放在一起成为一张图片(im)中间一些处理是当输入的两张图片高度不等时,把他们弄成相同高度,这样就可以并排输出了

什么是计算机病毒,简述计算机病毒的特点
计算机病毒具有传播性、隐蔽性、感染性、潜伏性、可激发性、表现性或破坏性。计算机病毒的生命周期:开发期→传染期→潜伏期→发作期→发现期→消化期→消亡期。计算机病毒是一个程序,一段可执行码。就像生物病毒一样,具有自我繁殖、互相传染以及激活再生等生物病毒特征。计算机病毒有独特的复制能力,它们...

计算机病毒的定义及其特点
繁殖性:计算机病毒可以像生物病毒一样进行繁殖,当正常程序运行时,它也进行运行自身复制,是否具有繁殖、感染的特征是判断某段程序为计算机病毒的首要条件。破坏性:计算机中毒后,可能会导致正常的程序无法运行,把计算机内的文件删除或受到不同程度的损坏。破坏引导扇区及BIOS,硬件环境破坏。传染性:计算机...

程序开发中的语句块,代码块是什么?
程序开发中语句块就是一段逻辑代码的集合,它表示一段程序运行逻辑,代码块是组成部分。程序中支持所有与 Pascal 或是 C 类似的常见形式的语句, 这个集合包括赋值,控制结构,函数调用,还有变量声明。3.3.1 – 语句块 语句块是一个语句序列,它们会按次序执行:程序 支持 空语句, 你可以用分号分割...

BUF DB 12H MOV AL BUF 这段程序是什么意思 运行完AL值是多少
duf db 12h ;是定义一个字节变量buf赋值12h mov al,buf ;将buf的值传送给al 运行完al值为12h 汇编语言爱好者为您回答.请选我!~

...编写一段程序,结果运行如下: abcdEFG AbCdEfG gfedcba
2){ String tmp = res2.substring(i, i+1);res2 = res2.replace(tmp, tmp.toUpperCase());} System.out.println(res2);StringBuffer sb = new StringBuffer(s);String res3 = new String(sb.reverse());System.out.println(res3);} } 运行结果:java Test abcEFG AbCdEfG gfedcba ...

临武县17185665933: 用c语言解决八皇后问题,要求第一个皇后位置用键盘输入,需要详细代码和解释,谢谢、 -
毓咬正柴: #include "stdio.h"#include "math.h" int row[8]; void arrange(int k) { int i,j; if(k>8){ for(i = 1;i printf("%2d\n",row[i]);//k>8时应该输出各列皇后的行号 return ; } for(j = 1;j { for(i = 1;iif(row [i] == j || (k-i) == abs(row[i] - j)) break; if(i>=k) //成立说明第k列...

临武县17185665933: c语言皇后问题的源程序和注释 -
毓咬正柴: #includeenum Status {TRUE,FALSE}; //枚举状态 int matrix[8][8]; //2位矩阵 int a[8],b[15],c[15]; //按行设置标志位 int count; //统计个数//初始化函数 void init() {for(int i=0;i<8;i++){for(int j=0;j<8;j++)matrix[i][j]=0; //矩阵置0a[i]=-1; //标志位置...

临武县17185665933: 数据结构八皇后问题代码 -
毓咬正柴: 代码如下: #include<stdio.h> int v,i,j,k,l,s,a[99]; main() { for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+=(v=j<s&&(!k&&!!printf(2+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j)&1:2])&&++l||a[i]<s&&v&&v-i+j&&v+i-j&&v+i-j))&&!(l%=s),v||(i==j?a[i+=k]=0:++a[i])>...

临武县17185665933: c语言n皇后问题 -
毓咬正柴: if(i==n-1)执行到了,但是 i 取值有问题,j=0的时候i就增加到5,j>0之后if(i==n-1)就不可能成立了

临武县17185665933: 用C语言里的栈结构实现八皇后问题 -
毓咬正柴: #include <stdio.h> #include <stdlib.h> #include <math.h> int Judge(int *p, int j)//判断当前棋子位置是否符合规则,是则返回1,否则返回0; {int i;for(i=0;i<j;i++){if(p[j]==p[i]) return 0;if(abs(p[j]-p[i])==j-i) return 0;}return 1; } int main() {int a[8]; ...

临武县17185665933: 八皇后问题求解的C语言程序的实现 -
毓咬正柴: 这是个前不久,我为别人写的一个代码;八皇后问题共有92种解; 以下代码是解决:对于固定一个皇后位置,输出所有可能情况. 如果这不适合你的答案你可以,稍微改改的哦~~代码如下:#include "stdio.h" bool board[8][8]={0}; int num=0...

临武县17185665933: 哪位高手帮我用C语言设计一个“八皇后问题“的程序并给出程序设计的流程图 谢谢啊 -
毓咬正柴: 八皇后问题:问题提出: 8*8的棋盘上放置8个皇后,在同一横线、竖线、对角线上会产生冲突,求不产生冲突即8个皇后都安全的放置方法.这里改变NCOUNT即可以求出n皇后的n*n棋盘的放置方法 张可彦: kyany@sina.com*/#include "stdio...

临武县17185665933: C语言八皇后问题
毓咬正柴: #include <stdio.h> #include <conio.h> #include <math.h> int i=0; int data[8]; char S[8][8]; void Q(int n); void show(); int visit(int n); //*********************************************** //主函数 void main() {printf("图中'O'代表皇后位置;有如下情况:\n");...

临武县17185665933: 八皇后问题 c程序原代码 -
毓咬正柴: 我原先写的八皇后问题,用来应付课程设计应该没有什么问题://&代表皇后位置#include "iostream"#include "iomanip"#define N 8 using namespace std; char arr[N][N]={""}; int count=0; int main() {void input(int m,int n); void output(); int ...

临武县17185665933: c语言问题,下面这段程序输出为什么是ace? -
毓咬正柴: 1.没有空格时. 首先执行c=getchar();此时c='a'; 然后比较getchar()!=' #';此时,getchar()='b';但是c='a'; 所以输出a 再执行c=getchar();此时c='c'; 然后比较getchar()!=' #';此时,getchar()='d';但是c='c'; 所...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网