急急急!!谁会改程序??

来源:百度知道 编辑:UC知道 时间:2024/05/12 12:35:56
请用cin,cout改下面的输入、输出
#include "stdio.h"
#define MAXN 20
int n, s; //该程序不用数组的第0个元素
int col[MAXN+1], a[MAXN+1];//col[i]第i行皇后所在的列;a[i]=0
//则表示第i列已经有皇后了
int b[2*MAXN+1], c[2*MAXN+1];//b[i]=0表示x+y=i的直线已经有皇后
//占了;c[i]=0表示x+n-y=i的直线已经有皇后占了
void queen(int k, int n)
{
int i, j;
char awn;
for (i=1; i<=n; i++)
if (a[i]&&b[k+i]&&c[n+k-i]) //判断新放一个皇后所在列,
//和两条斜线有无其他皇后
{
col[k]=i;
a[i]=b[k+i]=c[n+k-i]=0;
if (k==n)
{
s++;
printf("\nAnswer: %d\n", s);
for (j=1; j<=n; j++) printf("(%d,%d)\t", j, col[j]);
printf("\nPress any key to continue......");
scanf("%c", &awn);
}
else queen(k+1, n); //递归,进行下一个皇后的放置
a[i]=b[k+i]=c[n+k-i]=1;

#include "iostream.h"
#define MAXN 20
int n, s; //该程序不用数组的第0个元素
int col[MAXN+1], a[MAXN+1];//col[i]第i行皇后所在的列;a[i]=0
//则表示第i列已经有皇后了
int b[2*MAXN+1], c[2*MAXN+1];//b[i]=0表示x+y=i的直线已经有皇后
//占了;c[i]=0表示x+n-y=i的直线已经有皇后占了
void queen(int k, int n)
{
int i, j;
char awn;
for (i=1; i<=n; i++)
if (a[i]&&b[k+i]&&c[n+k-i]) //判断新放一个皇后所在列,
//和两条斜线有无其他皇后
{
col[k]=i;
a[i]=b[k+i]=c[n+k-i]=0;
if (k==n)
{
s++;
cout<<"\nAnswer:"<<s<<endl;
for (j=1; j<=n; j++)
cout<<"("<<j<<","<<col[j]<<")"<<"\t";
cout<<"\nPress any key to continue......";
cin>>awn; //scanf("%c", &awn); 这个用来停顿的!
}
else queen(k+1, n); //递归,进行下一个皇后的放置
a[i]=b[k+i]=c[n+k-i]=1; //回溯,返回上一个皇后
}
}
void main(vo