谁能告诉我这个程序哪里有问题?
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//全局变量
const int m = 8; //棋盘的列
const int n = 8; //棋盘的行
int x,y; //x,y坐标
int step = 0; //步骤
//结构:point
struct point
{
int x; //x坐标
int y; //y坐标
short di; //方向度:1~8表示8个不同的跳跃方向
bool value; //值:1表示已访问,0表示未访问
}chess[m][n];
//栈:path
//马跳过的路径用栈来表示
struct path
{
point *base;
point *top;
}path;
//初始化路径栈
void initpath(void)
{
path.base = new point[m*n];
if (!path.base)
{
exit(1); //分配不成功,则退出
}
path.top = path.base;
}
//后退一步
void backward(void)
{
/*在当前点已经被访问过的情况下,后退一步*/
delete --path.top; //删除栈顶元素
chess[x][y] = *(path.top-1); //返回新的栈顶元素
chess[x][y].di++;
}
//前进一步
void forward(void)
{
switch(chess[x][y].di)
{
//根据方向度,选择不同的跳跃方式
case 1:
chess[x][y].x = chess[x][y].x + 2;
chess[x][y].y = chess[x][y].y + 1;
break;
case 2:
chess[x][y].x = chess[x][y].x + 1;
chess[x][y].y = chess[x][y].y + 2;
break;
case 3:
chess[x][y].x = chess[x][y].x - 1;
chess[x][y].y = chess[x][y].y + 2;
break;
case 4:
chess[x][y].x = chess[x][y].x - 2;
chess[x][y].y = chess[x][y].y + 1;
break;
case 5:
chess[x][y].x = chess[x][y].x - 2;
chess[x][y].y = chess[x][y].y - 1;
break;
case 6:
chess[x][y].x = chess[x][y].x - 1;
chess[x][y].y = chess[x][y].y - 2;
break;
case 7:
chess[x][y].x = chess[x][y].x + 1;
chess[x][y].y = chess[x][y].y - 2;
break;
case 8:
chess[x][y].x = chess[x][y].x + 2;
chess[x][y].y = chess[x][y].y - 1;
break;
default:
break;
}
}
//判断path栈是否为空
bool StackEmpty()
{
if (path.top == path.base)
{
return 1; //空
}
else
{
return 0; //非空
}
}
//判断下一步是否会出界
bool IsOut(void)
{
switch(chess[x][y].di)
{
case 1:
if ((chess[x][y].x+2)>=m||(chess[x][y].y+1)>=n)
{
return 1;
}
else
{
return 0;
}
case 2:
if ((chess[x][y].x+1)>=m||(chess[x][y].y+2)>=n)
{
return 1;
}
else
{
return 0;
}
case 3:
if ((chess[x][y].x-1)<0||(chess[x][y].y+2)>=n)
{
return 1;
}
else
{
return 0;
}
case 4:
if ((chess[x][y].x-2)<0||(chess[x][y].y+1)>=n)
{
return 1;
}
else
{
return 0;
}
case 5:
if ((chess[x][y].x-2)<0||(chess[x][y].y-1)<0)
{
return 1;
}
else
{
return 0;
}
case 6:
if ((chess[x][y].x-1)<0||(chess[x][y].y-2)<0)
{
return 1;
}
else
{
return 0;
}
case 7:
if ((chess[x][y].x+1)>=m||(chess[x][y].y-2)<0)
{
return 1;
}
else
{
return 0;
}
case 8:
if ((chess[x][y].x+2)>=m||(chess[x][y].y-1)<0)
{
return 1;
}
else
{
return 0;
}
default:
break;
}
return 1;
}
//判断"当前点"是否已经访问过
bool IsVisted(void)
{
if (chess[x][y].value == 1)
{
return 1; //已被访问过
}
else
{
return 0; //未被访问过
}
}
//是否已经遍历完
bool IsFinish(void)
{
if (step == (m*n-1))
{
return 1;
}
else
{
return 0;
}
}
//打印路径栈
void printpath(void)
{
/*
point a[m*n]; //用来存放栈
for (int i=0;i<m*n;i++)
{
a[i] = *(--path.top);
}
for (int j=(m*n-1);j>=0;j++)
{
cout<<"("<<a[j].x<<","<<a[j].y<<")"<<" ";
if (j % n == 0)
{
cout<<endl;
}
}
*/
while (path.base != path.top)
{
cout<<(--path.top)->x<<" "<<(--path.top)->y<<" ";
}
int x;
cin>>x;
}