迷宫程序(4)

#include "iostream"
using namespace std;
struct weizhi
{
	int hen;
	int shu;
};
struct jilu
{
	int countent;
	weizhi *array;
	jilu *next;
};
void main()
{
	jilu* head;
	bool flage1=true,flage2=true;
	int array[8][10]={
		{1,1,1,1,1,1,1,1,1,1},
		{1,0,1,1,1,0,1,1,1,1},
		{1,1,0,1,0,1,1,1,1,1},
		{1,0,1,0,0,0,0,0,1,1},
		{1,0,1,1,1,0,1,1,1,1},
		{1,1,0,0,1,1,0,0,0,1},
		{1,0,1,1,0,0,1,1,0,1},
		{1,1,1,1,1,1,1,1,1,1}};
	head=new jilu;
    head->countent=0;
	head->next=NULL;
	jilu* point,*point1,*point2;
	point=new jilu;
	point->array=new weizhi[1];
	point->array[0].hen=1;
	point->array[0].shu=1;
	point->countent=1;
	point->next=head->next;
	head->next=point;
    while (flage1)
    {
		flage1=false;
		point2=head;
		point1=head->next;
		while (point1)
		{
			if (point1->array[point1->countent-1].hen==6&&point1->array[point1->countent-1].shu==8)
			{
				point2=point1;
				point1=point1->next;
				continue;
			}
			if (array[point1->array[point1->countent-1].hen+1][point1->array[point1->countent-1].shu]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen+1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen+1;
					point->array[i].shu=point1->array[point1->countent-1].shu;
					point->next=point1->next;
					point2->next=point;
					point2=point;
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}


			if (array[point1->array[point1->countent-1].hen+1][point1->array[point1->countent-1].shu+1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen+1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu+1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen+1;
					point->array[i].shu=point1->array[point1->countent-1].shu+1;
					point->next=point1->next;
					point2->next=point;
					point2=point;				
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen][point1->array[point1->countent-1].shu+1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen)&&(point1->array[i].shu==point1->array[point1->countent-1].shu+1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen;
					point->array[i].shu=point1->array[point1->countent-1].shu+1;
					point->next=point1->next;
					point2->next=point;
					point2=point;				
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen-1][point1->array[point1->countent-1].shu+1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen-1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu+1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen-1;
					point->array[i].shu=point1->array[point1->countent-1].shu+1;
					point->next=point1->next;
					point2->next=point;
					point2=point;				
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen-1][point1->array[point1->countent-1].shu]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen-1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen-1;
					point->array[i].shu=point1->array[point1->countent-1].shu;
					point->next=point1->next;
					point2->next=point;
					point2=point;
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen-1][point1->array[point1->countent-1].shu-1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen-1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu-1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen-1;
					point->array[i].shu=point1->array[point1->countent-1].shu-1;
					point->next=point1->next;
					point2->next=point;
					point2=point;
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen][point1->array[point1->countent-1].shu-1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen)&&(point1->array[i].shu==point1->array[point1->countent-1].shu-1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen;
					point->array[i].shu=point1->array[point1->countent-1].shu-1;
					point->next=point1->next;
					point2->next=point;		
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;	
					}
					head->countent++;
				}
				flage2=true;
			}

			if (array[point1->array[point1->countent-1].hen+1][point1->array[point1->countent-1].shu-1]==0)
			{
				for (int i=0;i<point1->countent;i++)
				{
					if ((point1->array[i].hen==point1->array[point1->countent-1].hen+1)&&(point1->array[i].shu==point1->array[point1->countent-1].shu-1))
					{
						flage2=false;
					}
				}
				if (flage2)
				{
					point=new jilu;
					point->countent=point1->countent+1;
					point->array=new weizhi[point->countent];
					for (int i=0;i<point1->countent;i++)
					{
						point->array[i].hen=point1->array[i].hen;
						point->array[i].shu=point1->array[i].shu;
					}
					point->array[i].hen=point1->array[point1->countent-1].hen+1;
					point->array[i].shu=point1->array[point1->countent-1].shu-1;
					point->next=point1->next;
					point2->next=point;
					point2=point;	
					if (point->array[point->countent-1].hen!=6&&point->array[point->countent-1].shu!=8)
					{
						flage1=true;
					}
					head->countent++;
				}
				flage2=true;
			}
			if (point2->next==point1)
			{
				point2->next=point1->next;
				delete []point1->array;
				delete point1;
				point1=point2->next;
				head->countent--;
			}
            else
			{
				delete []point1->array;
				delete point1;
				point1=point2->next;
				head->countent--;
			}
		}
    }
	point=head->next;
	cout<<head->countent<<"\n";
	while (point)
	{
		cout<<point->countent<<"  ";
		for (int i=0;i<point->countent;i++)
		{
			cout<<"("<<point->array[i].hen<<","<<point->array[i].shu<<") ";
		}
		cout<<"\n";
		point=point->next;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值