一个八皇后的程序,不知道怎么搞的,老出IO错

liujun999999 2005-06-21 08:49:07
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;
const n=8;
type list=record
tag:integer;
data:integer;
end ;
//int m,j,k,t,i=0;
var
a:array[0..n,0..n] of list;
m,j,k,t:integer;
i:integer;
begin
i:=0;
t:=0;
for j:=0 to n do
for k:=0 to n do
begin
a[j][k].data:=0;
a[j][k].tag :=0;
end;
while i<n do
begin
m:=0;
while m<n do
begin
if a[m][i].data<>0 then
m:=m+1
else
break;
end;
if (m<n) and (i=7) then
begin
writeln('good');
a[m][i].data:=1;
break;
end;
if m<n then
begin
a[m][i].data:=1;
for j:=0 to n do
begin
if j>i then
begin
a[m][j].data:=2;
a[m][j].tag:=a[m][j].tag+1;
end;
for k:=0 to n do//(k=0;k<n;k++)
begin
if k>i then
begin
if (k+j)=(i+m) then
begin
a[j][k].data:=2;
a[j][k].tag:=a[j][k].tag+1;
end;
if (k-j)=(i-m) then
begin
a[j][k].data:=2;
a[j][k].tag:=a[j][k].tag+1;
end;
end;
end;
end;
i:=i+1;
end
else
begin
i:=i-1;
for j:=0 to n do//(j=0;j<n;j++)
if a[j][i].data=1 then
begin
a[j][i].data:=2;
t:=j;//找到了行。
end;
for j:=0 to n do //(j=0;j<n;j++)
begin
if j>i then //对该数所对应的行进行处理,还原。
begin
a[t][j].tag:=a[t][j].tag+1;
if a[t][j].tag=0 then
a[t][j].data:=0;
end;
for k:=0 to n do //(k=0;k<n;k++)
begin
if k>i then
begin

if (k+j)=(i+t) then
begin
a[j][k].tag:=a[j][k].tag+1;
if a[j][k].tag=0 then
a[j][k].data:=0;
end;
if (k-j)=(i-t) then
begin
a[j][k].tag:=a[j][k].tag+1;
if a[j][k].tag=0 then
a[j][k].data:=0;
end;
end;
end;
end;
end;
end;
for j:=0 to n do//(j=0;j<n;j++)
for i:=0 to n do//(i=0;i<n;i++)
if a[j][i].data=1 then
writeln(inttostr(i));
// cout<<j<<'\t'<<i<<endl;
end.

麻烦各位给看看
...全文
170 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujun999999 2005-06-21
  • 打赏
  • 举报
回复
C语言的我写了也可以正常运行,改成delphi下的就奇怪了,有错
何鲁青 2005-06-21
  • 打赏
  • 举报
回复
八皇后问题的递归算法

#include <stdio.h>
#include <stdlib.h>
#define N 8 /* 棋盘边长 */
#define XXN 15 /* 正(反)对角线个数 */
#define TRUE 1
#define FALSE 0
int map[N][N]; /* 棋盘 */
int col[N]; /* 列 */
int XX[XXN]; /* 正对角线 */
int YY[XXN]; /* 反对角线 */
FILE* fp;
int num=0; /* 解的个数 */

/***显示一个解***/
void showMap()
{

int i,j;
fprintf(fp,"\n--------------------------\n");
for(i=0;i<N;i++){
for(j=0;j<N;j++)
fprintf(fp,"%-3d",map[i][j]);
fprintf(fp,"\n");
}
}

/***递归求解函数***/
int try(int y)
{
int i,j;
int success=FALSE;
if( y==N){ /* 求出一个解*/
showMap();
num++;
return TRUE;
}
for(i=0;i<N;i++){
if(XX[N-y+i]==0 && YY[i+y]==0 && col[i]==0) /* 保证布局要求:对角线,列,没有重复放置棋子 */
{

XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=1;
if(try(y+1)) success=TRUE; /* 放下一个皇后 */
XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=0;
}

}
return success;


}


main()
{
int i,j,result;

fp=fopen("queen8.txt","w+");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
map[i][j]=0;
for(i=0;i<XXN;i++) XX[i]=YY[i]=0;

fprintf(fp,"\n start..............");
if(!try(0))printf("\n no resolution!");
fprintf(fp,"\n num=%d",num);

}

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧