迷宫问题 数据结构

#include<stdio.h>
#include<stdlib.h>
#define max 5000
int mg[10][10]=
{
	{1,1,1,1,1,1,1,1,1,1},
	{1,0,0,1,0,0,0,1,0,1},
	{1,0,0,1,0,0,0,1,0,1},
	{1,0,0,0,0,1,1,0,0,1},
	{1,0,1,1,1,0,0,0,0,1},
	{1,0,0,0,1,0,0,0,0,1},
	{1,0,1,0,0,0,1,0,0,1},
	{1,0,1,1,1,0,1,1,0,1},
	{1,1,0,0,0,0,0,0,0,1},
	{1,1,1,1,1,1,1,1,1,1},
};
typedef struct
{
	int i,j;
	int pre;
}box;
typedef struct
{
	box data[max];
	int front,rear;
}quenen;
bool mgpath(int xi,int yi);
void print(quenen *q,int front);
void en(quenen *q,box e);
void de(quenen *q,int &e);
int main()
{
	mgpath(1,1);
	return 0;
}
void print(quenen *q,int front)
{
	int k=front,j,ns=0;
	while(k!=-1)
	{
		ns++;
		printf("(%d,%d) ",q->data[k].i,q->data[k].j);
		k=q->data[k].pre;
		if(ns%5==0)
			printf("\n");
	}
	printf("\n");
}
void en(quenen *q,box e)
{
	q->rear++;
	q->data[q->rear].i=e.i;
	q->data[q->rear].j=e.j;
	q->data[q->rear].pre=e.pre;
}
void de(quenen *q,box &e)
{
	q->front++;
	e.i=q->data[q->front].i;
	e.j=q->data[q->front].j;
	e.pre=q->data[q->front].pre;
}
bool mgpath(int xi,int yi)
{
	box e;
	int i,j,di,i1,j1;
    quenen *q;
	q=(quenen *)malloc(sizeof(quenen));
	q->rear=q->front=-1;
	e.i=xi;
	e.j=yi;
	e.pre=-1;
	en(q,e);
	mg[xi][yi]=-1;
	while(q->front!=q->rear)
	{
		de(q,e);
		i=e.i;j=e.j;
		if(i==8&&j==8)
		{
			print(q,q->front);
			free(q);
			return true;
		}
		for(di=0;di<4;di++)
		{
			switch(di)
			{
			case 0:i1=i-1;j1=j;  break;
			case 1:i1=i;  j1=j+1;break;
			case 2:i1=i+1;j1=j;  break;
			case 3:i1=i;  j1=j-1;break;
			}
			if(mg[i1][j1]==0)
			{
				e.i=i1;
				e.j=j1;
				e.pre=q->front;
				en(q,e);
			    mg[i1][j1]=-1;
			}
		}
	}
	free(q);
	return false;
}

 

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/shenyulingyeye/article/details/81460514
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞