八皇后C语言代码问题

大腿们,帮渣渣看看这个程序,一直弄不出来。以下是源代码:#include<stdio.h>#include<math.h>#include<string.h>#inclu... 大腿们,帮渣渣看看这个程序,一直弄不出来。以下是源代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
int m=1; //用来记数
char a[9][9]; //数据结构声明
void Print(int a[]) //打印棋盘
{ int i, j;
for(i=1;i<=8;i++)
{
for(j=1;j<=8;j++)
if(j==a[i])
printf("@");
else
printf("*");
}
printf("这是第%d种情况",m);
printf("\n");
m++;
}
int Judge(int k,int a[])//判断同一行,列,主负对角线上有无棋子
{
int i;
for(i=1;i<=k;i++)
if(abs(k-i)==abs(a[i]-a[k])||a[i]==a[k])//函数名abs,实现求整数的绝对值
return 0;
return 1;
}
void backtrack (int t,int a[])//放置皇后
{
int i;
for(i=1;i<=8;i++){
a[t]=i;

if(Judge(t,a))
{
if(t==8-1){
Print(a);

}
else backtrack(t+1,a);
}
}
}
int main(){
backtrack(0,a);

}
展开
 我来答
LYWW214
推荐于2016-11-05 · 超过16用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:24.6万
展开全部
应该改为:#include <stdio.h>
#include <math.h>
#define max 9//棋子数及棋盘大小max*max
int a[max];

/* 打印棋盘 */
int m=1;
void Print(int a[])
{
int i, j;
printf("这是第%d种情况",m);
for(i=0;i<=max;i++)
{
for(j=0;j<=max;j++)
if(j==a[i])
printf("@");
else
printf("*");
}
printf("\n\n");
m++;
}

int Judge(int k,int a[])//判断同一行,列,主负对角线上有无棋子
{
int i;
for(i=0;i<k;i++){
if(a[i]==a[k] || (k-i)==abs(a[i]-a[k]))return 1;//函数名abs,实现求整数的绝对值
}
return 0;
}

/* 放置皇后 */
void backtrack(int t,int a[])
{
int i;
for(i=0;i<max;i++){
a[t]=i;
if(!Judge(t,a)){
if(t==max-1) Print(a);
else backtrack(t+1,a);
}
}
}

int main()
{
backtrack(0,a);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菠萝279
2014-07-09 · 超过50用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:48.2万
展开全部
#include <math.h>
#include <stdio.h>
#define MAX 8 /* 棋子数及棋盘大小MAXxMAX */
int board[MAX];

/* 印出结果 */
void show_result()
{
int i;
for(i=0;i<MAX;i++)
printf("(%d,%d)",i,board[i]);
printf("\n");
}

/* 检查是否在同一直横斜线上有其它棋子 */
int check_cross(int n)
{
int i;
for(i=0;i<n;i++){
if(board[i]==board[n] || (n-i)==abs(board[i]-board[n]))return 1;
}
return 0;
}

/* 放棋子到棋盘上 */
void put_chess(int n)
{
int i;
for(i=0;i<MAX;i++){
board[n]=i;
if(!check_cross(n)){
if(n==MAX-1) show_result();/* 找到其中一种放法了...印出结果 */
else put_chess(n+1);
}
}
}

void main()
{
clrscr();
puts("The possible placements are:");
put_chess(0);
puts("\n Press any key to quit...");
getch();
return;
}


到底是哪些奇葩老师布置的作业?
求采纳为满意回答。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式