【C语言】全排列算法(回溯+递归)——找出找出走通五个地方最短路径

该博客介绍了一个C语言编程案例,涉及生成不重复的城市坐标、记录两两城市距离、全排列算法(包括回溯和简单递归方法)寻找最短路径。作者强调了递归在全排列算法中的应用,并提供了代码实现。最后,代码通过计算比较找到并打印最短路径。

目录

一、预览

1. 测试文件(test.c)

2. 函数的声明(game.h)

3. 函数的实现(game.c)

二、重点突破

1. 打印菜单 && 生成不重复的五个城市坐标

2. 记录两两城市的距离

※ 3. 全排列算法

方法一(回溯)

方法二(简单递归)

4. 计算比较 && 打印最短路径

                                                                  summery💐


这个小案例的重难点就是用递归列出全排列,还有一个注意的事项就是防止生成的随机坐标不能重复🤔                                                                                                                     

                                                                                                    ”

一、预览

还是老样子,先上代码⬇️

1. 测试文件(test.c)

#include"game.h"

void menu()
{
	printf("**************************\n");
	printf("********  1.play  ********\n");
	printf("********  0.exit  ********\n");
	printf("**************************\n");
}

void game()
{
	int city[5] = { 0 };   //数组五个元素代表五个城市
	int citys[5][5] = { 0 };    //存放两两城市的距离
    
	Initcity(city);  //生成随机坐标,放在city数组中

	dest_city(city,citys);  //计算两两城市的距离

	MIN_dest(citys);  //找出最短路径并打印
	

}

void test()
{
	srand((unsigned int)time(NULL));   //生成随机数
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);

}

int main()
{
	system("color 0B");   //设置颜色(可略)
	test();
	return 0;
}

2. 函数的声明(game.h)

#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<memory.h>

void Initcity(int *city);
void dest_city(int* city, int citys[5][5]);
void MIN_dest(i
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dusong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值