void print_path(int path[],int u, int v,int Clen) { int k; k = path[v]; if(k == -1) { printf("no path!"); return; } printf("(%d,%d)",path[v]/Clen,path[v]%Clen); while(k != u) { printf(" <- "); printf("(%d,%d)",path[k]/Clen,path[k]%Clen); k = path[k]; } }解释代码
时间: 2024-01-20 13:02:59 浏览: 14
这段代码是一个用于打印两个点之间路径的函数。函数名为 print_path,函数参数包括一个整数数组 path,两个整数 u 和 v,以及一个整数 Clen。其中,path 数组记录了从起点到每个点的路径信息,u 和 v 分别表示起点和终点,Clen 表示每行的长度。
函数首先将变量 k 初始化为终点v的前一个点,如果k为-1,则表示起点和终点之间没有路径,直接输出 "no path!" 并返回。否则,函数从终点v开始,通过遍历path数组,依次输出每个点的坐标,直到遍历到起点u。具体地,函数先输出终点v的坐标,然后通过while循环不断更新k为前一个点,输出箭头符号和该点的坐标,直到k等于起点u。输出的坐标是通过将path数组中的元素转换成行列坐标计算得到的,其中行号为path[k]/Clen,列号为path[k]%Clen。最终,函数将打印出从起点到终点的路径信息。
相关问题
#ifndef FUNC_H_INCLUDED #define FUNC_H_INCLUDED #define MaxLNum 110 #define MaxCNum 110 #define MaxSize 10100 #define inf 10000 extern int arcs[MaxSize][MaxSize]; extern int s_nodes[MaxSize]; extern int g_nodes[MaxSize]; extern int dist[MaxSize]; extern int visited[MaxSize]; extern int pre[MaxSize]; extern int s_path[MaxSize][MaxSize]; extern int goal[MaxSize][2]; extern int s_vital[MaxSize][2]; //定义机器人(结构体)。 struct Robot{ int Pos[2]; //当前位置 char CTYPE; //当前的字符类型 struct ArEle{ char CType; int flag; }Around[8]; //周围结点的字符类型及其标记(从North开始,沿顺时针排列) }; typedef struct QNode* Queue; typedef struct Robot* PtrRt; typedef struct Node* PtrToNode; struct Node{ //队列中的结点 PtrRt Rt; PtrToNode Next; }; struct QNode { PtrToNode Front, Rear; // 队列的头、尾指针 }; Queue CreateQueue(); Queue AddQ( Queue Q, PtrRt Rt ); int IsEmpty( Queue Q ); PtrRt DeleteQ( Queue Q ); int** around(int pos[2]); int Judge(char c); void Record(PtrRt Rt,Queue Q,char expor[][MaxCNum]); PtrRt CreateRt(int x,int y,char store[][MaxCNum],int Llen,int Clen); void save_path(PtrRt Rt_1,PtrRt Rt_2,int Clen); PtrRt move(PtrRt Rt,int pos[2],char store[][MaxCNum],int Llen,int Clen); void BFS(PtrRt Rt,Queue Q,char store[][MaxCNum],char expor[][MaxCNum],int Llen,int Clen); void print_path(int path[],int u, int v,int Clen); void dijkstra(int begin,int nodes[],int Llen,int Clen); void Nicolas(char store[][MaxCNum],char expor[][MaxCNum],int Llen,int Clen); #endif // FUNC_H_INCLUDED解释代码
这段代码是一个头文件 func.h,定义了一些宏和函数声明,其中包括:
- MaxLNum:最大行数
- MaxCNum:最大列数
- MaxSize:最大节点数
- inf:一个无穷大的数
- arcs:二维数组,表示节点之间的边
- s_nodes:源节点集合
- g_nodes:目标节点集合
- dist:源节点到各个节点的最短距离
- visited:节点是否被访问过
- pre:节点在最短路径中的前驱节点
- s_path:源节点到所有节点的最短路径
- goal:目标节点的坐标
- s_vital:源节点的坐标
还定义了一个机器人的结构体,包括当前位置、字符类型和周围结点的字符类型及其标记。同时还定义了一个队列结构体 QNode 和一个节点结构体 Node,用于 BFS 算法中的队列操作。
在头文件中声明了一些函数:
- CreateQueue:创建队列
- AddQ:向队列中添加机器人节点
- IsEmpty:判断队列是否为空
- DeleteQ:从队列中删除机器人节点
- around:获取节点周围的节点
- Judge:判断字符类型
- Record:记录机器人节点信息
- CreateRt:创建机器人节点
- save_path:保存两个节点之间的最短路径
- move:移动机器人
- BFS:广度优先搜索算法
- print_path:打印最短路径
- dijkstra:Dijkstra 算法
- Nicolas:机器人走迷宫算法(主函数)
void save_path(PtrRt Rt_1,PtrRt Rt_2,int Clen) { arcs[(Rt_1->Pos[0]*Clen+Rt_1->Pos[1])][Rt_2->Pos[0]*Clen+Rt_2->Pos[1]] = 1; arcs[(Rt_2->Pos[0]*Clen+Rt_2->Pos[1])][Rt_1->Pos[0]*Clen+Rt_1->Pos[1]] = 1; }
这个函数的作用是将两个机器人之间的路径存储到一个邻接矩阵 `arcs` 中。这个邻接矩阵是一个二维数组,其中每个元素表示两个节点之间是否有一条边,如果有则为 1,否则为 0。
函数中,通过输入参数 `Rt_1` 和 `Rt_2`,分别获取两个机器人的位置信息,并根据这些信息计算出它们在邻接矩阵中的位置。接着将这两个位置之间的元素赋值为 1,表示它们之间有一条路径。由于路径是双向的,因此需要在邻接矩阵中同时更新这两个位置之间的元素。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)