关于骑士巡游问题!大家看看怎么出错的!
请帮忙测试查错!
#include "stdafx.h"
#include <iostream>
using namespace std;
void move(int id,int &x,int &y);
bool IsUnfoot(int id,int x,int y);
bool IsFinish(int id,int x,int y);
bool IsOut(int i,int row,int column);
int IsArrive(int row,int column);
int horizontal[8];
int vertical[8];
bool close[8][8];//走过的格标为 1
main()
{
horizontal[0] = 2; // 8种移动方式之列
horizontal[1] = 1;
horizontal[2] = -1;
horizontal[3] = -2;
horizontal[4] = -2;
horizontal[5] = -1;
horizontal[6] = 1;
horizontal[7] = 2;
vertical[0] = -1; // 8种移动方式之行
vertical[1] = -2;
vertical[2] = -2;
vertical[3] = -1;
vertical[4] = 1;
vertical[5] = 2;
vertical[6] = 2;
vertical[7] = 1;
//对close赋初值
for (int x=0;x<8;x++)
{
for (int y=0;y<8;y++)
{
close[x][y]=0;
}
}
int row=0,column=1;
IsArrive(row,column);
}
void move(int id,int &x,int &y)
{
if (close[(x+horizontal[id])][y+(vertical[id])]==0&&IsOut(id,x,y))
{
close[(x+horizontal[id])][y+(vertical[id])]=1;
x=(x+horizontal[id]);
y=y+vertical[id];
}
}
bool IsUnfoot(int id,int x,int y)
{
if (close[(x+vertical[id])][y+(horizontal[id])]==0&&IsOut(id,x,y))
return 1;
else
return 0;
}
bool IsFinish(int id,int x,int y)
{
close[(x+vertical[id])][y+(horizontal[id])]=1;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if (close[i][j]==0)
{
close[(x+vertical[id])][y+(horizontal[id])]=0;
return 0;
}
}
}
close[(x+vertical[id])][y+(horizontal[id])]=0;
return 1;
}
bool IsOut(int i,int row,int column)//是否走出棋盘
{
switch(i)
{
case 0:if (row<6&&column<7)return 1;else return 0;
case 1:if (row<7&&column<6)return 1;else return 0;
case 2:if (row>0&&column<6)return 1;else return 0;
case 3:if (row>1&&column<7)return 1;else return 0;
case 4:if (row>1&&column>0)return 1;else return 0;
case 5:if (row>0&&column>1)return 1;else return 0;
case 6:if (row<7&&column<1)return 1;else return 0;
case 7:if (row<6&&column>0)return 1;else return 0;
}
return 1;
}
int IsArrive(int row,int column)
{
for (int id=0;id<8;id++)
{
if ((IsOut(id,row,column))&&IsUnfoot(id,row,column)&&IsFinish(id,row,column))
{
cout<<"ok";
return id;
}
else
continue;
}
move(IsArrive(row,column),row,column);
return 8;
}