`
leili
  • 浏览: 179942 次
社区版块
存档分类
最新评论

穷举法迷宫求解简单实现(C)

阅读更多

穷举法迷宫求解简单实现,主要是锻炼队列及链表的使用,直接上代码:

//
//  main.c
//  migong
//
//  Created by mac on 12-8-13.
//  Copyright 2012年 __MyCompanyName__. All rights reserved.
//

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
	int x;
	int y;
}DATA;

typedef struct node
{
	DATA data;
	struct node *next;
}ListNode;

typedef struct 
{
	int x;
	int y;
	int pre;
}TP;
TP qu[100];//队列
int f,r;

//迷宫数组,外面一圈1主要用于防止越界用
int a[6][7]={ 
	{1,1,1,1,1,1,1}, 
	{1,0,1,1,1,0,1}, 
	{1,1,0,1,0,1,1}, 
	{1,0,1,0,0,1,1}, 
	{1,0,1,1,1,0,1}, 
	{1,1,1,1,1,1,1} 
}; 

//八个方向,上下左右,左上左下,右上右下
int mg[8][2]={
	{1,1},
	{1,0},
	{1,-1},
	{0,-1},
	{-1,-1},
	{-1,0},
	{-1,1},
	{0,1}
};

//路径打印函数
void print(int f,int m2,int n2)
{
	ListNode *h,*q,*p;
	int s,pr;
	s=f;
	h=(ListNode *)malloc(sizeof(ListNode));//链表头
	h->next=NULL;
    
	q=(ListNode *)malloc(sizeof(ListNode));
	q->data.x=m2;
	q->data.y=n2;
	q->next=h->next;
	h->next=q;
    
	q=(ListNode *)malloc(sizeof(ListNode));
	q->data.x=qu[s].x;
	q->data.y=qu[s].y;
	q->next=h->next;
	h->next=q;
    	
	pr=qu[s].pre;
    	while(pr!=0)
	{
		q=(ListNode *)malloc(sizeof(ListNode));
		q->data.x=qu[pr].x;
		q->data.y=qu[pr].y;
		q->next=h->next;
		h->next=q;
		pr=qu[pr].pre;
	}
	p=h->next;
	printf("(%d,%d)",p->data.x,p->data.y);
	p=p->next;
	while(p!=NULL)
	{
		printf("--(%d,%d)",p->data.x,p->data.y);//打印链表
		p=p->next;
	}
}

//迷宫求解
void MazePath(int m1,int n1,int m2,int n2)
{
	TP k;
	int p,q,v;
	f=r=0;
	k.x=m1;
	k.y=n1;
	k.pre=0;
	r++;
	qu[r]=k;
	a[m1][n2]=2;
	while(f<r)//队列不为空
	{
		f++;
		k=qu[f];
		for(v=0;v<8;v++)//八个方向穷举
		{
			p=k.x+mg[v][0];
			q=k.y+mg[v][1];
			if(a[p][q]==0)
			{
				if(p==m2&&q==n2)
				{
					print(f,m2,n2);
					return ;
				}
				r++;
				qu[r].x=p;
				qu[r].y=q;
				qu[r].pre=f;
				a[p][q]=2;
			}
		}
	}
}

int main (int argc, const char * argv[])
{

	int i,j;
	printf("迷宫图:\n");
	puts("---------------------");
	for(i=0;i<6;i++)
	{
		for(j=0;j<7;j++)
			printf(" %d ",a[i][j]);
		printf("\n");
	}
	puts("---------------------");
	printf("行走路径如下:\n");
	MazePath(1,1,4,5);
	printf("\n");
	return 0;
}

最后上个图:

 

更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    迷宫求解(穷举法)c++

    使用穷举法编写的C++迷宫解法。使用了数组操作模拟栈的操作。

    数据结构迷宫穷举法求解

    本篇文章将详细介绍一个基于数据结构的迷宫求解算法实现。该算法利用了栈(stack)这一线性数据结构来解决迷宫问题,并采用了穷举法来寻找从起点到终点的所有可能路径。在算法设计中,我们定义了一系列的数据类型和...

    迷宫求解一般采用“穷举法”源代码

    迷宫求解一般采用“穷举法”,逐一沿顺时针方向查找相邻块(一共四块-东(右)、南(下),西(左)、北(上))是否可通,即该相邻块既是通道块,且不在当前路径上。用一个栈来记录已走过的路径栈是限定仅在表尾(top)进行...

    C语言使用队列和栈实现自动生成和求解迷宫

    C语言实现 在C语言中,我们可以使用数组或链表来实现队列和栈。对于队列,可以定义一个包含前后指针的结构体,用于表示队首和队尾;对于栈,可以使用动态数组或链表,利用索引或指针表示栈顶。文件`Console...

    数据结构C语言迷宫课程设计报告

    - 使用穷举法或其它算法验证迷宫是否有通路。 - 若无通路,则重复生成过程,直至生成有通路的迷宫。 ##### 2. 迷宫的求解 - **穷举求解**:一种基于栈的数据结构实现的算法,用于寻找从入口到出口的路径。 - **...

    实验5求解迷宫问题.doc

    他们将使用C语言来编写程序,并应用蛮力法来解决迷宫问题。通过编程实现,学生可以更好地理解迷宫问题的解决过程,并掌握蛮力法的应用。 知识点4:实验环境 本实验的实验环境是VC6.0或Visual Studio 2008。学生将...

    迷宫趣味游戏

    这种自动求解功能为玩家展示了迷宫解决的最优路径,对于学习算法和理解其工作原理的玩家来说非常有益。 游戏的实现依赖于Java编程语言,Java以其跨平台性和强大的库支持而闻名。游戏中可能使用了Java的图形用户界面...

    C语言 数据结构中求解迷宫问题实现方法

    本文将详细讲解如何使用C语言和数据结构来实现迷宫问题的求解。 首先,迷宫问题的基本思想是穷举法,也就是广度优先搜索(BFS)或深度优先搜索(DFS)。在本例中,采用了深度优先搜索的方法,通过栈来保存当前位置...

    求解迷宫问题-(c语言-很详细哦).doc

    这个问题通常用穷举法或回溯算法来解决。在C语言中,我们可以利用数组和栈数据结构来实现这个算法。 首先,迷宫可以被抽象为一个二维数组,其中0表示通道,1表示墙壁。例如,题目中给出的迷宫是一个10x10的网格,用...

    数据结构上机实验_栈和队列的应用_迷宫问题 (含代码和报告)

    **概要设计原理**:本实验采用的是穷举法求解迷宫问题,具体步骤如下: 1. 从迷宫入口出发,选定一个方向进行探索; 2. 如果当前方向可以通行,则继续前进,并记录下行走的路径; 3. 如果当前方向无法通行,则回溯...

    数据结构C语言课成设计迷宫源程序

    数据结构C语言以链栈为存储结构的穷举法求解的迷宫,可以自动生成迷宫,可以自动生成有通路的迷宫,声称自动有通路的迷宫算法单一,以while死循环来生成,所以速度较慢,耐心等待。该资源为本人自己写的课程设计作业...

    课程设计 迷宫问题 找一条通路

    通过穷举法,程序应能找到一条从入口到出口的路径,并按照题目要求的格式输出结果。 【程序流程】程序一般包括以下步骤: 1. 读取迷宫数据,构建Maze数组。 2. 初始化链表栈。 3. 从入口(1,1)开始,将位置压入栈...

    PHP实现基于回溯法求解迷宫问题的方法详解

    在本例中,我们将讨论如何使用PHP实现回溯法来求解迷宫问题。迷宫问题通常表现为一个二维矩阵,其中1代表可通行的路径,0则表示障碍物。问题的目标是从起点(左上角)到达终点(右下角),且只能向右和向下移动。 ...

    (完整)《C语言程序设计课程设计》题目-软件工程2班.docx

    * 迷宫求解:需要使用“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。 四、 栈及其操作问题 * 栈的定义...

    (完整)《C语言程序设计课程设计》题目-软件工程2班.pdf

    通常,计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索。 栈及其操作问题 栈是一种限制在表的一端进行插入和删除操作的线性表,栈顶是允许进行插入、删除操作的一端,用栈顶指针来...

    C语言程序设计课程设计题目.pdf

    迷宫问题的解决方法通常是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。这种方法可以有效地解决迷宫中的...

    Unity3D教程:游戏开发算法

    在解决复杂的优化问题,如迷宫求解或棋盘游戏策略时,回溯法十分有效。 分治法是将大问题分解为小问题来解决,然后合并小问题的解得到大问题的解。在游戏开发中,例如图形渲染的分块算法,多线程并行计算,或解决...

    Matlab程序源代码回溯.zip

    下面我们将深入探讨回溯法以及压缩包内的三个具体应用:n皇后问题、迷宫求解和排列树的回溯搜索。 1. 回溯法:回溯法是一种尝试所有可能解的搜索算法,主要用于解决约束满足问题。它通过试探性地构建解来寻找问题的...

    计算机常用算法计算机常用算法

    这种算法常用于解决组合优化问题,如八皇后问题、迷宫求解等。 4. **模拟法**: 模拟法是按照问题的物理过程或规则来编写程序,以复制问题的实际情况。这种方法在处理现实世界问题时很有用,例如模拟交通流、天气...

Global site tag (gtag.js) - Google Analytics