精华内容
下载资源
问答
  • 数据结构课程设计迷宫
    2021-03-13 13:32:03

    41528d3028836879cd698677c3999917.gif数据结构课程设计迷宫算法的实现_JAVA

    数 据 结 构 课 程 设 计走 迷 宫学号:200908204136姓名:熊军日期:6 月 16 日一、题目说明.分别用以下算法实现。并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,演示走迷宫的过程和结果。1.递归算法。2.使用栈作为辅助结构。3.使用队列作为辅助结构。二、总体设计方案以及细节设计为实现上述程序功能,主要使用的 JAVA AWT 和 JAVA SWING 包import java.awt.*;import javax.swing.*;import hartech.ui.*;3. 本程序包含四个模块:1) 主程序模块:package mg;import java.awt.*;import javax.swing.*;/*** Title: maze Global class** Description: ** Date: 2006-08-31 */public class Main {// _reset 变量用于 reset时用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton[][] buttons;static Walking walking;static boolean[][] brick, brick_reset = {{ true, true, true, true, true, false, true, true, true, true,true, true, true, true, },{ true, false, false, false, true, false, true, true, true, true,false, false, false, true, },{ true, false, true, false, true, false, false, false, false, true,true, false, true, true, },{ true, false, true, false, true, false, true, true, true, false,true, false, true, false, },{ true, true, true, false, false, false, true, false, true, false,true, false, true, true, },{ true, false, true, true, true, true, true, false, true, false,true, false, false, true, },{ true, false, true, true, true, true, true, false, true, false,true, false, true, true, },{ true, false, false, false, false, false, true, true, true, false,true, false, true, false, },{ true, false, true, true, true, false, false, false, false, false,true, false, true, true, },{ true, false, true, false, true, false, true, true, true, true,true, false, false, true, },{ true, false, true, false, true, false, true, false, false, false,false, false, true, true, },{ true, true, true, false, true, true, true, true, true, true,true, false, true, true, }};static JFrame jFrame;static UI ui;public static void main(String[] args) {//启 动新线程,创 建一个窗口javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {//J.setLookAndFeel(“Metal“);jFrame = new JFrame(“is there any way to go? Maze --- “);//建立一个 Swing 窗体jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭图标后,程序退出并关闭// addMain.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFrame.setSize(700, 400);//J.goCenter(jFrame);Main.drawButtons();Main.reset();jFrame.setVisible(true);}});}// 用于重置到 软件开始public static void reset() {if (walking != null) {walking.timer.stop();}clean();brick = copyBoolean(brick_reset);speed = speed_reset;UI.jSlider.setValue(speed);setBricks();}// 用于清楚已 标记上的数字public static void clean() {if (walking != null) {walking.timer.stop();}for (int i = 0; i Title: maze Global class** Description: ** Date: 2006-08-31 */public class Main {// _reset 变量用于 reset 时用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton[][] buttons;static Walking walking;static boolean[][] brick, brick_reset = {{ true, true, true, true, true, false, true, true, true, true,true, true, true, true, },{ true, false, false, false, true, false, true, true, true, true,false, false, false, true, },{ tru

    更多相关内容
  • 迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).docx迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).docx迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).docx迷宫问题——数据结构课程设计...
  • 迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).pdf迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).pdf迷宫问题——数据结构课程设计迷宫问题完整版(含源代码).pdf迷宫问题——数据结构课程设计迷宫...
  • 数据结构课程设计迷宫问题
  • 数据结构课程设计迷宫问题源程序
  • 数据结构课程设计迷宫问题.doc
  • 本程序主要是对任意给定的迷宫,求出一条从入口到出口的...使我们基本掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
  • 数据结构课程设计-------漫步迷宫 一、 课程设计题目:漫步迷宫 二、 问题描述: 用m行n列的m*n个正方格表示一个迷宫,其中划有斜线的方格表示不可通行,未划有斜线的方格表示通行。请编写寻找从入口到出口的一...
  • 数据结构课程设计迷宫算法的实现_JAVA.doc
  • 数据结构课程设计迷宫求解》,可指定行数和列数,核心算法是栈。
  • 迷宫--数据结构课程设计,内含两份不同的迷宫设计和两份各自的文档论文。
  • 迷宫问题的求解是一个很好的在栈或者队列等方面的应用问题,本次设计是以栈去实现的。问题的求解主要是给定一个入口坐标和出口坐标时求出一条从入口到出口的路径,如果不存在或存在要做出相应的判断,存在时打印其...
  • 数据结构课程设计必备文档!迷宫算法!利用栈
  • 数据结构课程设计 迷宫求解C++语言描述 这是一个数据结构的课程设计,我选择了迷宫求解 这个题目,使用C++语言才描述,经测试无误,测试环境:Windows 7 x64 旗舰版,Visual Studio 2010 旗舰版
  • 核心算法是利用等价类的方式实现的迷宫自动生成与迷宫自动寻径,带有完整的界面,并加入了计分功能,注释还好,数据结构课程设计,分享给需要的同学。
  • 数据结构课程设计迷宫问题求解 c语言 vc++6.0开发环境
  • 山东大学数据结构课程设计题目 迷宫老鼠 含GUI 实现完整 代码清晰 界面美观
  • 利用二维数组来表示迷宫,用1表示一堵墙,用0表示通路,为了不出界在迷宫的周围需添加一堵墙;先创建迷宫,然后给出要求通路的起点和终点,求出一条通路,通路在迷宫中以数字编号即1,2,3……给出,另外还给出了通路中各个...
  • 通过链栈实现回溯算法,以求得迷宫的一条路径。
  • 呵呵,这是我大二时做的课程设计,其实也算是份爱情的礼物,送给我当时最爱的人
  • 1、用户进入菜单页面选择迷宫的状态(1表示手动生成迷宫,2表示自动生成迷宫,3表示迷宫游戏,4表示退出) 2、运用本迷宫系统,用户可以根据自己的需求输入所需的迷宫,其中0表示通路,1表示障碍。用户可以自己定义...
  • 计算机解迷宫通常用的...可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可以迷宫的四周加一圈障碍。对于迷宫任一位置,均可约定有东、南、西、北四个方向可通。
  • 数据结构课程设计_迷宫问题 会有所帮助得
  • 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了...设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。
  • 数据结构课程设计迷宫) 加油加油 新了解的小知识 1.表示你使用的是标注命名空间,也就是在程序开始应该有这么一句话 using namespace std ; 这是遵循c++标准的 <iostream.h> 则没有遵循c++标准 ///////////...

    迷宫

    加油加油

    新了解的小知识

    1.表示你使用的是标注命名空间,也就是在程序开始应该有这么一句话
    using namespace std ; 这是遵循c++标准的
    <iostream.h> 则没有遵循c++标准
    /
    <string.h>是旧的C头文件,对应的是基于char*的字符串处理函数;
    是包装了std的C++头文件,对应的是新的strng类;
    是对应旧的C头文件的std版本
    2.在这里插入图片描述
    C语言常见头文件
    **3.**DFS
    深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。

    算法思想
    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”

    模板

    int check(参数)
    {
        if(满足条件)
            return 1;
        return 0;
    }
     
    void dfs(int step)
    {
            判断边界
            {
                相应操作
            }
            尝试每一种可能
            {
                   满足check条件
                   标记
                   继续下一步dfs(step+1)
                   恢复初始状态(回溯的时候要用到)
            }
    }   
    
    

    4.

    题目
    给定一个M行N列的迷宫图,其中 "0"表示可通路,"1"表示障碍物,无法通行。在迷宫中只允许在水平或上下四个方向的通路上行走,走过的位置不能重复走。

    5行8列的迷宫如下:

    0 1 1 1 0 0 0 0
    0 0 0 1 0 0 0 0
    0 1 0 0 0 1 0 0
    0 1 1 1 0 1 1 0
    1 0 0 0 0 0 0 0
    则从左上角(1,1)至右下角(5,8)的最短路径为:

    1,1–》2,1–》2,2–》2,3–》3,3–》3,4–》3,5–》4,5–》5,5–》5,6–》5,7–》5,8

    题目保证每个迷宫最多只有一条最短路径。

    请输出该条最短路径,如果不存在任何通路,则输出"NO FOUND".

    输入格式:
    第一行,输入M和N值,表示迷宫行数和列数。

    接着输入M行数值,其中,0表示通路,1表示障碍物。每列数值用空格符间隔。

    接下来可能输入多组迷宫数据。

    当输入M的值为-1时结束输入。

    输出格式:
    按行顺序输出路径的每个位置的行数和列数,如 x,y

    如果不存在任何路径,则输出"NO FOUND".

    每组迷宫寻路结果用换行符间隔。

    输入样例:
    在这里给出一组迷宫。例如:

    8 8
    0 0 1 0 0 0 1 0
    0 0 1 0 0 0 1 0
    0 0 0 0 1 1 0 0
    0 1 1 1 0 0 0 0
    0 0 0 1 0 0 0 0
    0 1 0 0 0 1 0 0
    0 1 1 1 0 1 1 0
    1 0 0 0 0 0 0 0
    4 4
    0 0 1 0
    0 0 0 0
    0 0 1 1
    0 1 0 0
    -1 -1
    输出样例:
    在这里给出相应的输出。例如:

    1,1
    2,1
    3,1
    4,1
    5,1
    5,2
    5,3
    6,3
    6,4
    6,5
    7,5
    8,5
    8,6
    8,7
    8,8

    NO FOUND
    结尾无空行

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    struct site{
    	int x,y,k;
    	friend bool operator<(const struct site& a, const struct site& b) {
            if (a.x < b.x ||
                (a.x == b.x && a.y < b.y)) {
                return true;
            }
            return false;
        }
    }p[100];//将到终点的路线逆向保存
    int main(){
    	int m, move[4][2] = { {1,0} , {0,1} , {-1,0} , {0,-1} };//用二维数组分别表示下右上左
    	cin>>m;
    	while(m != -1) {
    		map<site,site> f;//用来记录前驱
    		int n,a[100][100],flag = 1;
    		struct site temp;
    		queue<site> q;
    		cin>>n;
    		for(int i = 1; i <= m; i++) 
    			for (int j = 1; j <= n; j++)
    				cin>>a[i][j];
    		for(int i = 1; i <= m; i++) {//将周围用墙围起来
    			a[i][0] = 1;
    			a[i][n+1] = 1;
    		}
    		for (int j = 1; j <= n; j++){//将周围用墙围起来
    			a[0][j] = 1;
    			a[m+1][j] = 1;
    		}
    		temp.x = 1;
    		temp.y = 1;
    		q.push(temp);
    		a[1][1] = 6;//搜索过的地方值变为6
    		while(!q.empty()){
    			temp = q.front();//取队首坐标
    			q.pop();
    			int x = temp.x, y = temp.y;
    			if(x == m && y == n) {//如果找到终点
    				flag = 0;
    				int k = 0;
    				p[k++] = temp;
    				while(temp.x != 1 || temp.y != 1){//将到终点的路线逆向保存
    					p[k++] = f[temp];
    					temp = f[temp];
    				}
    				for(int i = k-1; i >= 0; i--)//输出路线
    					cout<<p[i].x<<','<<p[i].y<<endl;
    				break;
    			}
    			for (int w = 0; w < 4; w++) {//遍历四个方向
    				temp.x = x + move[w][0];
    				temp.y = y + move[w][1];
    				if(a[temp.x][temp.y] == 0){
    					q.push(temp);
    					a[temp.x][temp.y] = 6;//搜索过的地方值变为6
    					f[temp].x = x;
    					f[temp].y = y;
    				}
    			}
    		}
    		if(flag)
    			cout<<"NO FOUND";
    		cout<<endl;
    		cin>>m;
    	}
    	return 0;
    }
    
    
    C语言代码
    //dfs  算法  c++  剪枝 
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    
    using namespace std;
    
    int n, m, Min;			// Min 最短路径   n行m列
    int Map[100][100];		// 整个地图  0 1 标记
    int vis[100][100];		// 走过的地图
    int dir[4][2] = {
                    0,1,
    				0,-1,
    				-1,0,
    				1,0 };	// 方向
    int stepA[100][2];		// 走的路径坐标
    int stepB[100][2];		// 最短走过的路径坐标
    
    // 进行深度优先搜索   DFS 
    void dfs(int x, int y, int step)
    {
        
    	if (step > Min)
    	{
        
    		return;
    	}
    
    	// 当前分支步数小于当前最短步数
    	// 如果路径搜到终点  就把当前的step赋值给Min,路径存入stepB
    	if (x == n && y == m)
    	{
        
    		for (int i = 0; i < 100; ++i)
    		{
        
    			if (stepA[i][0] == -1 && stepA[i][1] == -1)
    			{
        
    				break;
    			}
    			stepB[i][0] = stepA[i][0];
    			stepB[i][1] = stepA[i][1];
    		}
    		Min = step;
    		return;
    	}
    
    	// 像四个方向继续搜索
    	for (int i = 0; i < 4; ++i)
    	{
        
    		int xx = x + dir[i][0];
    		int yy = y + dir[i][1];
    
    		if (xx <= 0 || yy <= 0 || xx > n || yy > m)
    		{
        
    			// 进行下一个
    			continue;
    		}
    		if (!vis[xx][yy] && Map[xx][yy] == 0)
    		{
        
    			stepA[step][0] = xx;
    			stepA[step][1] = yy;
    
    			vis[xx][yy] = 1;
    			dfs(xx, yy, step + 1);
    			vis[xx][yy] = 0;
    		}
    	}
    	return;
    }
    
    int main()
    {
        
    	while (scanf("%d %d", &n, &m) && m != -1)
    	{
        
    		for (int i = 1; i <= n; ++i)
    		{
        
    			for (int j = 1; j <= m; ++j)
    			{
        
    				scanf("%d", &Map[i][j]);
    			}
    		}
    		// 初始化数据
    		memset(vis, 0, sizeof(vis));
    		memset(stepA, -1, sizeof(stepA));
    		memset(stepB, -1, sizeof(stepB));
    
    		vis[1][1] = 1;
    
    		Min = 10000;	// 赋初值
    		dfs(1, 1, 0);	// 深度优先遍历
    		if (Min == 10000)
    		{
        
    			printf("NO FOUND\n");
    		}
    		else
    		{
        
    			printf("1,1\n");
    			for (int i = 0; i < Min; i++)
    			{
        
    				printf("%d,%d\n", stepB[i][0], stepB[i][1]);
    			}
    			printf("\n");
    		}
    	}
    
    	return 0;
    }
    
    java代码

    待更新。。。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,912
精华内容 764
关键字:

数据结构课程设计迷宫

数据结构 订阅