普通寻路算法

普通寻路算法include 普通寻路算法 回溯法 近似穷举 找到的路径不一定是最短路径 defineMAX NUMBER LENGTH6voidp path 用矩阵表示地图 其中 1 表示路 0 表示没有路 2 表示终点 起始地点为 1 0 staticintgPa MAX NUMBER LENGTH MAX NUMBER LENGTH

#include<stdio.h> /* 普通寻路算法 回溯法,近似穷举 找到的路径不一定是最短路径 */ #define MAX_NUMBER_LENGTH 6 void print_path(); /*用矩阵表示地图:其中1表示路,0表示没有路,2表示终点,起始地点为(1,0)*/ static int gPath[MAX_NUMBER_LENGTH][MAX_NUMBER_LENGTH] = { {0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 1, 0}, {0, 1, 1, 1, 1, 0}, {0, 0, 1, 0, 1, 2}, {0, 0, 1, 1, 1, 1}, {0, 0, 1, 1, 1, 0} }; static int gValue[MAX_NUMBER_LENGTH][MAX_NUMBER_LENGTH] = {0}; /* 记录已走过的路 */ /*判断函数,判断当前节点是否合法*/ int check_pos_valid(int x, int y) { /* 节点是否出边界 */ if(x < 0 || x>= MAX_NUMBER_LENGTH || y < 0 || y >= MAX_NUMBER_LENGTH) return 0; /* 当前节点是否存在路 */ if(0 == gPath[x][y]) return 0; /* 当前节点是否已经走过 */ if('#' == gValue[x][y]) return 0; return 1; } /*递归的寻找算法*/ int find_path(int x, int y) { if(check_pos_valid(x,y)) { if(2 == gPath[x][y]) { gValue[x][y] = '#'; return 1; } gValue[x][y] = '#'; if(find_path(x, y-1)) return 1; if(find_path(x-1, y)) return 1; if(find_path(x, y+1)) return 1; if(find_path(x+1, y)) return 1; //走到头,没有路可以走 gValue[x][y] = 0; return 0; } return 0; } /*寻找所有路径*/ void find_path_all(int x, int y) { if(check_pos_valid(x,y)) { if(2 == gPath[x][y]){ gValue[x][y] = '#'; print_path(); gValue[x][y] = 0; } gValue[x][y] = '#'; find_path(x, y-1); find_path(x-1, y); find_path(x, y+1); find_path(x+1, y); gValue[x][y] = 0; } } /*打印路径*/ void print_path() { int outer; int inner; for(outer = 0; outer < MAX_NUMBER_LENGTH; outer++){ for(inner = 0; inner < MAX_NUMBER_LENGTH; inner++){ printf("%c ", gValue[outer][inner]); } printf("\n"); } } int main() { find_path(1,0); print_path(); return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230587.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle中文全文索引[通俗易懂]

    环境Oracle9.0.2 Oracle全文索引的基本知识一、历史背景Oracle数据库的全文检索技术已经非常完美,OracleText使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。OracleText是Oracle9i采用的新名称,在Oracle8/8i中它被称作OracleinterMediaText,在Oracle8以前它的名称是Oracle

    2022年4月11日
    40
  • 独热编码(One-Hot Encoding)介绍及实现

    独热编码(One-Hot Encoding)介绍及实现一、介绍One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。独热编码是利用0和1表示一些参数,使用N位状态寄存器来对N个状态进行编码。例如:参考数字手写体识别中:如数字字体识别0~9中,6的独热编码为0000001000自然状态码为:000,001,010,011,100,101…

    2025年8月20日
    5
  • PLC编程基础[通俗易懂]

    PLC编程基础[通俗易懂]1.开始一个新的工程按照以下步骤来建立一个新的工程:  (1)选择工具栏中的新建按钮。      (2)定义工程的设备条目。  (3)保存工程当一个新的PLC被添加到工程中的时候,将创建以下空表:1)空的本地符号表;2)全局符号表;3)IO表;4)PLC内存数据;5)PLC设置数据。2.编写一个梯形图程序下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→…

    2025年10月5日
    3
  • ZIlliqa团队关于分片、可扩展性和安全的智能合约的采访

    ZIlliqa团队关于分片、可扩展性和安全的智能合约的采访

    2021年7月1日
    66
  • DDL和DML的含义与区别「建议收藏」

    1、DDL和DML的含义1、DML(DataManipulationLanguage)数据操作语言-数据库的基本操作,SQL中处理数据等操作统称为数据操纵语言,简而言之就是实现了基本的“增删改查”操作。包括的关键字有:select、update、delete、insert、merge2、DDL(DataDefinitionLanguage)数据定义语言-用于定义和管理SQL数据库中的所有对象的语言,对数据库中的某些对象(例如,database,table)进行管理。包括的关键字有:crea

    2022年4月17日
    116
  • 一比一还原axios源码(零)—— 是结束亦是开始

    从vue2版本开始,vue-resource就不再被vue所维护和支持,官方也推荐使用axios,所以,从我使用axios至今,差不多有四五年了,这四五年的时间只能算是熟练应用,很多内部的实现和原理不

    2022年3月25日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号