穷举法迷宫求解简单实现,主要是锻炼队列及链表的使用,直接上代码:
//
// 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++迷宫解法。使用了数组操作模拟栈的操作。
本篇文章将详细介绍一个基于数据结构的迷宫求解算法实现。该算法利用了栈(stack)这一线性数据结构来解决迷宫问题,并采用了穷举法来寻找从起点到终点的所有可能路径。在算法设计中,我们定义了一系列的数据类型和...
迷宫求解一般采用“穷举法”,逐一沿顺时针方向查找相邻块(一共四块-东(右)、南(下),西(左)、北(上))是否可通,即该相邻块既是通道块,且不在当前路径上。用一个栈来记录已走过的路径栈是限定仅在表尾(top)进行...
C语言实现 在C语言中,我们可以使用数组或链表来实现队列和栈。对于队列,可以定义一个包含前后指针的结构体,用于表示队首和队尾;对于栈,可以使用动态数组或链表,利用索引或指针表示栈顶。文件`Console...
- 使用穷举法或其它算法验证迷宫是否有通路。 - 若无通路,则重复生成过程,直至生成有通路的迷宫。 ##### 2. 迷宫的求解 - **穷举求解**:一种基于栈的数据结构实现的算法,用于寻找从入口到出口的路径。 - **...
他们将使用C语言来编写程序,并应用蛮力法来解决迷宫问题。通过编程实现,学生可以更好地理解迷宫问题的解决过程,并掌握蛮力法的应用。 知识点4:实验环境 本实验的实验环境是VC6.0或Visual Studio 2008。学生将...
这种自动求解功能为玩家展示了迷宫解决的最优路径,对于学习算法和理解其工作原理的玩家来说非常有益。 游戏的实现依赖于Java编程语言,Java以其跨平台性和强大的库支持而闻名。游戏中可能使用了Java的图形用户界面...
本文将详细讲解如何使用C语言和数据结构来实现迷宫问题的求解。 首先,迷宫问题的基本思想是穷举法,也就是广度优先搜索(BFS)或深度优先搜索(DFS)。在本例中,采用了深度优先搜索的方法,通过栈来保存当前位置...
这个问题通常用穷举法或回溯算法来解决。在C语言中,我们可以利用数组和栈数据结构来实现这个算法。 首先,迷宫可以被抽象为一个二维数组,其中0表示通道,1表示墙壁。例如,题目中给出的迷宫是一个10x10的网格,用...
**概要设计原理**:本实验采用的是穷举法求解迷宫问题,具体步骤如下: 1. 从迷宫入口出发,选定一个方向进行探索; 2. 如果当前方向可以通行,则继续前进,并记录下行走的路径; 3. 如果当前方向无法通行,则回溯...
数据结构C语言以链栈为存储结构的穷举法求解的迷宫,可以自动生成迷宫,可以自动生成有通路的迷宫,声称自动有通路的迷宫算法单一,以while死循环来生成,所以速度较慢,耐心等待。该资源为本人自己写的课程设计作业...
通过穷举法,程序应能找到一条从入口到出口的路径,并按照题目要求的格式输出结果。 【程序流程】程序一般包括以下步骤: 1. 读取迷宫数据,构建Maze数组。 2. 初始化链表栈。 3. 从入口(1,1)开始,将位置压入栈...
在本例中,我们将讨论如何使用PHP实现回溯法来求解迷宫问题。迷宫问题通常表现为一个二维矩阵,其中1代表可通行的路径,0则表示障碍物。问题的目标是从起点(左上角)到达终点(右下角),且只能向右和向下移动。 ...
* 迷宫求解:需要使用“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。 四、 栈及其操作问题 * 栈的定义...
通常,计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索。 栈及其操作问题 栈是一种限制在表的一端进行插入和删除操作的线性表,栈顶是允许进行插入、删除操作的一端,用栈顶指针来...
迷宫问题的解决方法通常是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。这种方法可以有效地解决迷宫中的...
在实现过程中,可以采用穷举法,从入口开始尝试各个方向,直到找到出口或确定无解。选作内容则鼓励进一步优化,例如编写递归算法找出所有可能的路径,并以更直观的方式输出迷宫和路径。 在概要设计中,栈的抽象数据...
在解决复杂的优化问题,如迷宫求解或棋盘游戏策略时,回溯法十分有效。 分治法是将大问题分解为小问题来解决,然后合并小问题的解得到大问题的解。在游戏开发中,例如图形渲染的分块算法,多线程并行计算,或解决...
下面我们将深入探讨回溯法以及压缩包内的三个具体应用:n皇后问题、迷宫求解和排列树的回溯搜索。 1. 回溯法:回溯法是一种尝试所有可能解的搜索算法,主要用于解决约束满足问题。它通过试探性地构建解来寻找问题的...