八皇后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);
} 展开
#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);
} 展开
2个回答
展开全部
应该改为:#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;
}
#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;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
到底是哪些奇葩老师布置的作业?
求采纳为满意回答。
#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;
}
到底是哪些奇葩老师布置的作业?
求采纳为满意回答。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询