#include<time.h>
#include <stdio.h>
#include<windows.h>
#include<iostream>
#define M 5 //行数
#define N 5 //列数
#define MaxSize 100 //栈最多元素个数
int a[M][N];
void map(int xi, int yi, int a[M][N])//随机产生地图
{
// a.输入迷宫的大小M行和N列,两者为整数
//b.由随机数产生0或1,建立迷宫。
int m, n;
srand((unsigned int)time(NULL));
for (m = 0; m < M; m++)//生成墙壁
{
for (n = 0; n < N; n++)
{
if (m == 0 || n == 0 || m == M - 1 || n == N - 1)
a[m][n] = 1;
else
a[m][n] = 0;
}
}
for (m = 1; m < M - 1; m++)
{
for (n = 1; n < N - 1; n++)
{
a[m][n] = (int)rand() % 2 + 0;
}
}
a[xi][yi] = 0;//防止入口是1情况下也入栈
a[M - 2][N - 2] = 0;//防止出口是1情况下也入栈
printf("迷宫中元素 :\n");
for (m = 0; m < M; m++)
{
for (n = 0; n < N; n++)
{
if (a[m][n] == 1)
printf("1");
else
printf("0");
}
printf("\n");
}
}
struct migong {
int i; //路径横坐标
int j; //路径纵坐标
int di; //方向
}
Stack[MaxSize], Path[MaxSize]; //定义栈和存放最短路径的数组
int top = -1; //栈顶指针
int count = 1; //路径数计数
int minlen = MaxSize; //最短路径长度
void mgpath() { //路径为:(1,1)->(M,N)
int i, j, di, find, k;
top++; Stack[top].i = 1; Stack[top].j = 1; Stack[top].di = -1;
a[1][1] = -1; //初始结点进栈
while (top > -1) { //栈不空时循环
i = Stack[top].i; j = Stack[top].j; di = Stack[top].di;
if (i == M && j == N) { //找到了出口,输出路径
printf("M:", count++);
for (k = 0; k <= top; k++) {
printf("(%d,%d) ", Stack[k].i, Stack[k].j);
if ((k + 1) % 5 == 0) //输出时每5个结点换一行
printf("\n\t");
}
printf("\n");
if (top + 1 < minlen) { //比较输出最短路径
for (k = 0; k <= top; k++)
Path[k] = Stack[k];
minlen = top + 1;
}
a[Stack[top].i][Stack[top].j] = 0; //让该位置变为其他路径的可走结点
top--;
i = Stack[top].i; j = Stack[top].j; di = Stack[top].di;
}
find = 0;
while (di < 4 && find == 0) { //找下一个可走结点
di++;
switch (di) {
case 0:i = Stack[top].i - 1; j = Stack[top].j; break; //上面
case 1:i = Stack[top].i; j = Stack[top].j + 1; break; //右边
case 2:i = Stack[top].i + 1; j = Stack[top].j; break; //下面
case 3:i = Stack[top].i; j = Stack[top].j - 1; break; //左边
}
if (a[i][j] == 0)
find = 1;
}
if (find == 1) { //找到了下一个可走结点
Stack[top].di = di; //修改原栈顶元素的di值
top++; //下一个可走结点进栈
Stack[top].i = i;
Stack[top].j = j;
Stack[top].di = -1;
a[i][j] = -1; //避免重复走到该结点
}
else {
a[Stack[top].i][Stack[top].j] = 0; //让该位置变为其他路径的可走结点
top--;
}
}
printf("最短路径如下:\n");
printf("长度: %d\n", minlen);
printf("路径: ");
for (k = 0; k < minlen; k++) {
printf("(%d,%d) ", Path[k].i, Path[k].j);
if ((k + 1) % 5 == 0) //输出时每5个结点换一行
printf("\n\t");
}
printf("\n");
}
int main() {
int a[M][N];
map(1,1,a);
Sleep(1000);
printf("迷宫所有路径如下:\n");
mgpath();
return 0;
}
哪位大神解决一下关于子函数的参数能作为另一个子函数的参数问题啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-Fay 2021-06-22 08:35关注
子函数的参数能作为另一个子函数的参数,理论上可以,比如在子函数中调用子函数,那么子函数的参数可以作为另一个子函数的参数
解决 无用评论 打赏 举报
悬赏问题
- ¥20 基于ros2的orbslam3的实时运行
- ¥100 支付行业技术人员来一个。常年包养
- ¥15 kotlin multiplaform Compose项目 需要实现一个文件选择器获取手机上的文件
- ¥15 Python没爬取到数据,求看这个是什么原因
- ¥15 sqlite 读取数据如何避免float类型转化为指数形式
- ¥15 IVX做拼图游戏,设置事件为“开始重叠”不弹target
- ¥15 PHPCMS在表单提交之后对某一个字段进行二次联动并显示在前台提示语上
- ¥50 Python调用Canalyzer发报文
- ¥15 关于使用Azure Auto ML时上传的数据无法加载MLTable问题
- ¥15 flume采集日志信息到hdfs