VC++2012编程演练数据结构《8》回溯法解决迷宫问题
来源:互联网 发布:米拓cms 编辑:程序博客网 时间:2024/05/16 07:46
回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)∣xi∈Si ,i=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。其中Si是分量xi的定义域,且 |Si| 有限,i=1,2,…,n。我们称E中满足D的全部约束条件的任一n元组为问题P的一个解。
解问题P的最朴素的方法就是枚举法,即对E中的所有n元组逐一地检测其是否满足D的全部约束,若满足,则为问题P的一个解。但显然,其计算量是相当大的。
迷宫按照数组来组织
int mase[m][n]={{0,0,0,1,0,0},{0,1,0,0,0,0},{0,1,1,1,1,0},{0,0,0,0,0,1},{1,0,1,1,0,0}};
创建迷宫类如下
//使用回溯法求解迷宫问题#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<fstream.h>//路口的结构体定义typedef struct{int left; int forward; int right;}InterS;//迷宫类定义与实现class Maze{private: int mazeSize;//路口个数 int Exit; //出口 InterS *intSec;//路口集合 public: //构造函数 Maze(char *filename); //搜索函数 int TravMaze(int intSecV);};Maze::Maze(char *filename){ifstream fin; fin.open(".\\1.dat",ios::in);//打开文件 if(!fin) {cerr<<"数据文件无法打开!\n";exit(1);} fin>>mazeSize;//读入路口个数 intSec=new InterS[mazeSize+1];//建立路口集合数组 for(int i=1;i<=mazeSize;i++)//读入所有路口的结构体数值 fin>>intSec[i].left>>intSec[i].forward>>intSec[i].right; fin>>Exit; //读入出口号码 fin.close();//关闭文件}int Maze::TravMaze(int intSecV){if(intSecV>0) {if(intSecV==Exit)//到达出口 {cout<<intSecV<<"<==";//输出路口号码 return 1;} else if(TravMaze(intSec[intSecV].left))//向左搜索 {cout<<intSecV<<"<==";//输出路口号码 return 1;} else if(TravMaze(intSec[intSecV].forward))//向前搜索 {cout<<intSecV<<"<=="; return 1;} else if(TravMaze(intSec[intSecV].right))//向右搜索 {cout<<intSecV<<"<=="; return 1;} } return 0;}
调用代码如下
//迷宫类的测试void main(){cout<<"运行结果:\n"; cout<<"求解迷宫问题:\n"; char fileName[20]={".\\1.dat"}; Maze m(fileName); int start=1; if(m.TravMaze(start)) cout<<endl<<"此迷宫的一条通路如上输出所示!\n"; else cout<<"此迷宫无通路!\n"; cin.get();}效果如下
下载地址如下
http://download.csdn.net/detail/yincheng01/4785788
- VC++2012编程演练数据结构《8》回溯法解决迷宫问题
- 回溯法解决迷宫问题
- 回溯法解决迷宫问题
- 回溯法解决迷宫问题
- VC++2012编程演练数据结构《6》优先级队列演练
- VC++2012编程演练数据结构《11》哈希表
- VC++2012编程演练数据结构《12》二叉排序树
- VC++2012编程演练数据结构《13》单链表
- VC++2012编程演练数据结构《21》二叉排序树
- VC++2012编程演练数据结构《24》哈夫曼树
- VC++2012编程演练数据结构《29》图
- 【数据结构】用回溯法求解迷宫问题
- 数据结构-迷宫问题(回溯法)
- scala 回溯法解决迷宫问题
- 回溯法解决迷宫搜索问题
- VC++2012编程演练数据结构《2》单循环链表与约瑟夫问题
- 回溯算法解决迷宫问题
- 迷宫问题 回溯法
- java常用类
- 开始学习HTML
- 外企面试常问的英语问题
- mapreduce 利用InverseMapper.class对key,value进行 交换实现词频排序
- 各RAID组级别的对比
- VC++2012编程演练数据结构《8》回溯法解决迷宫问题
- JAVASCRIPT贪吃蛇
- 依赖倒置原则(DIP)Dependence Inversion Principle --- 设计模式原则
- 地图服务中地址和经纬度的互相转换
- 【编程之美】一摞烙饼的排序 .
- smarty-内建函数(include)
- Air Mobile As3 App
- win7下,jdk环境变量配置
- 守护线程