骑士走棋盘

bedynamic 2013-08-09 10:01:17
#include<iostream>
using namespace std;
int maze[7][7]={{2,2,2,2,2,2,2},
{0,0,0,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,2,0,2,2},
{2,2,0,2,0,2,2},
{2,0,0,0,0,0,2},
{2,2,2,2,2,0,2}};
int startI=0;
int startJ=0;
int success=0;
int endI=5;
int endJ=5;
int visit(int i,int j)
{
maze[i][j]=0;
if(i==endI&&j==endJ)
{
success=1;
if(success!=1&&maze[i][j-1]==0)
visit(i,j-1);
else if(success!=1&&maze[i][j-1]==2)
visit(i,j);
if(success!=1&&maze[i-1][j]==0)
visit(i-1,j);
else if(success!=1&&maze[i][j-1]==2)
visit(i,j);
if(success!=1&&maze[i][j+1]==0)
visit(i,j+1);
else if(success!=1&&maze[i][j-1]==2)
visit(i,j);
if(success!=1&&maze[i+1][j]==0)
visit(i+1,j);
else if(success!=1&&maze[i][j-1]==2)
visit(i,j);


}
else if(success!=1)
maze[i][j]=0;
return success;
}
int main()
{

int i,j;
cout<<"print migong"<<endl;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
if(maze[i][j]==2)
cout<<"黑框";
else
cout<<" ";
cout<<endl;
}
if(visit(startI,startJ))
cout<<"no outway"<<endl;
else
{
cout<<"Show pass"<<endl;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{

if(maze[i][j]==2)
cout<<"黑框";
else if(maze[i][j]==0)
cout<<"﹫";
else
cout<<" ";
}
cout<<endl;
}
}

return 0;
}


结果是这样的。。如何修改啊。。。
...全文
301 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzl1992yzl 2014-09-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#define BOOL  int
#define TRUE	1
#define FALSE	0
#define LINE	9
#define ROW		9

int maze[LINE][ROW] = {							//构建一个9行9列迷宫
	{2, 0, 2, 2, 2, 2, 2, 2, 2},
	{0, 0, 2, 2, 2, 2, 0, 2, 2},
	{2, 0, 0, 0, 0, 0, 0, 0, 2},
	{2, 0, 2, 2, 0, 2, 2, 0, 2},
	{0, 0, 2, 2, 0, 2, 2, 0, 2},
	{2, 0, 2, 2, 0, 2, 2, 0, 2},
	{2, 0, 2, 2, 0, 2, 0, 0, 0},
	{2, 0, 2, 2, 0, 2, 2, 0, 0},
	{2, 0, 2, 2, 0, 2, 2, 2, 2},
};                                          

int start_x = 8, start_y = 1;               //设置起点,start_x是行数
int end_x = 7, end_y = 8;                   //设置终点,end_x是行数
int Flag = FALSE;							//初始探路标志为FALSE

BOOL Step(int x, int y);					//探路函数
void Show(void);							//显示迷宫的函数
int main(void)
{
	printf("maze:\n");                      //打印迷宫图,为方便查看,将数字换为图形打印
	Show();
	printf("\n");

	if(Step(start_x, start_y))
	{
		printf("正确的走法如下!\n");
		Show();		
	}
	else
	{	
		printf("没有发现出口!\n");
	}

	printf("\n");
	return 0;
}


int Step(int x, int y)           //用递归算法求解路径                 
{
	maze[x][y] = 1;

	//本位置是否是出口
	if(x == end_x && y == end_y)
	{
		Flag = TRUE;
	}
	
	if(Flag != TRUE && maze[x + 1][y] == 0 && x<(LINE-1))
		{Step(x + 1, y);}
	
	if(Flag != TRUE && maze[x][y - 1] == 0 && y>0)
		{Step(x, y - 1);}
	
	if(Flag != TRUE && maze[x - 1][y] == 0 && x>0)
		{Step(x - 1, y);}

	if(Flag != TRUE && maze[x][y + 1] == 0 && y<(ROW-1))
		{Step(x, y + 1);}

	//如果没有成功,把现在的位置设置成0
	if(Flag != TRUE)
	{
		maze[x][y] = 0;
	}

	return Flag;
}

void Show(void)
{
	int x, y;

	for(x = 0; x < LINE; x++)
	{
		for(y = 0; y < ROW; y++)
		{
			if(maze[x][y] == 2)
				printf("■");
			else if(maze[x][y] == 1) 
				printf("☆");
			else
				printf("□");
		}
		printf("\n");
	}

	return;
}
今天上午刚写的,正好用上了,嘿嘿
bedynamic 2013-08-11
  • 打赏
  • 举报
回复
谢了,差不多了。。我再看看。。。
Jackie_Zhu 2013-08-09
  • 打赏
  • 举报
回复
这样是不行的,用广度优先搜索记录路径,然后按路径打印
wubicheng 2013-08-09
  • 打赏
  • 举报
回复
这个在数据结构里有,迷宫的问题是采用栈的方式来解决的,我记得好像是这样,你的代码我没有细看,你确定你求出来的路径是对的?如果路径是对的,只是打印问题的话,你不如新建一个数组,只存储正确路径然后打印出来即可,正确的路径应该是不会走到死胡同里去的,如果当前路径不通,就把它从数组中剔除,你这个感觉是走的每一步都打印了出来。如果路径也没有求对,你可以去参考数据结构教材里关于栈的例子,简单地说就是小人先是每次都朝着一个固定的方向行走,如果遇到了障碍物就换一个方向行走,直到新的方向可通为止,如果除了来时的方向外其他三个方向都不通,那就是死胡同,就沿原路返回到上一个有多个出口的点,采用栈的结构,最后在栈中得到的就是一条完整的可行路线,显示它就行了。 这个方法我试过,以前还做过一个迷宫游戏,迷宫采用随机算法生成,只是随机算法有问题,迷宫规模一大,半天都生成不了一个迷宫,这个到现在都还不知道怎么解决。 我知道的就这么多了,希望能够帮到你。
foxandhuzh 2013-08-09
  • 打赏
  • 举报
回复
还是没看懂,你那个算法什么都没做
bedynamic 2013-08-09
  • 打赏
  • 举报
回复
不是,这个算法就是迷宫,题目打错了。。。
foxandhuzh 2013-08-09
  • 打赏
  • 举报
回复
骑士可以走上下左右,要求从迷宫的入口走到出口的路径?
bedynamic 2013-08-09
  • 打赏
  • 举报
回复
打错了,是迷宫啊。。。。
foxandhuzh 2013-08-09
  • 打赏
  • 举报
回复
骑士的行走规则是什么? 求的结果是什么?
bedynamic 2013-08-09
  • 打赏
  • 举报
回复
2表示墙,0表示可以通过。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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