最先进的透明手机:急!谁会该程序??

来源:百度文库 编辑:高考问答 时间:2024/05/02 08:05:01
下面的程序我不要输入n的值,我只要n=8就行了,怎么改,还有下面的只能输出一个结果,我要能一次输出所有92种,怎么改??谢了

#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(void)
{
int i;
cout<<"\nEnter n:";
cin>>n;
for (i=0; i<=n; i++) a[i]=b[i]=c[i]=1;
for (;i<=2*n;i++) b[i]=c[i]=1;
s=0;
queen(1, n);
}
能不能改一下,使输出用#表示空,*表示皇后再输出

#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(void)
{
int i;
n=8;
for (i=0; i<=n; i++) a[i]=b[i]=c[i]=1;
for (;i<=2*n;i++) b[i]=c[i]=1;
s=0;
queen(1, n);
}