“旅行推销商问题”简易暴力实现

应付离散实验足够了,但是还不会调用EasyX绘图啊~~~

  1 #include <bits/stdc++.h>
  2 #include <windows.h>
  3
  4 int start = 0;
  5
  6 // 城市名称
  7 char city_name[6] = { ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };
  8
  9 // 记录到过的城市
 10 int city[6] = {0};
 11
 12
 13 int pass_count = 0;                // 记录当前经到过的城市数量
 14 char pass_path[7] = {0};        // 记录路线
 15
 16
 17 // 城市之间的路径
 18 int city_path[6][6] =
 19 {
 20     { 0, 6, 7, 2, 9, 16 },        // a
 21     { 6, 0, 3, 11, 12, 15 },    // b
 22     { 7, 3, 0, 9, 18, 5 },        // c
 23     { 2, 11, 9, 0, 13, 18 },    // d
 24     { 9, 12, 18, 13, 0, 13 },    // e
 25     { 16, 15, 5, 18, 13, 0 }    // f
 26 };
 27
 28
 29 // 判断是否已经到过a城市
 30 bool ispassed( int a )
 31 {
 32     return city[a] > 0;
 33 }
 34
 35 void init()
 36 {
 37     start = 0;
 38     pass_count = 0;
 39     int i;
 40     for( i = 0; i < 6; i ++ )
 41     {
 42         city[i] = 0;
 43         pass_path[i] = 0;
 44     }
 45     pass_path[i] = 0;
 46 }
 47
 48 //////////////////////////////////////////////////////////////
 49 // 功能:找出与当前城市最近且没有到达过的城市
 50 // 参数:输入当前城市a,输出下一个城市b,
 51 // 返回:两个城市之间的路程
 52 //////////////////////////////////////////////////////////////
 53 int calc_path( int a,int& b )
 54 {
 55     int i =0;
 56     int min = 1000;
 57     b = 0;
 58     for(  i= 0; i < 6; i ++ )
 59     {
 60         if( min > city_path[a][i] && !ispassed(i) )
 61         {
 62             min = city_path[a][i];
 63             b = i;
 64         }
 65     }
 66     if( min < 1000 )
 67         city[b] = 1;
 68     return min;
 69 }
 70
 71
 72 bool input_city_num( int &city_num )
 73 {
 74     char city_name = ‘A‘;
 75     printf( "输入起点城市编号(A~F或a~f):" );
 76     scanf( "%c", &city_name );
 77     if( city_name >= ‘a‘ && city_name <= ‘f‘ )
 78         city_name -= 32;
 79     fflush(stdin);
 80
 81     city_num = city_name - ‘A‘ + 1;
 82     if( city_num > 7 || city_num <= 0 )
 83     {
 84         return false;
 85     }
 86     return true;
 87 }
 88
 89
 90 void start_travel()
 91 {
 92     int city_num = 0;
 93     int i = 0;
 94     int path = 0;
 95     int ret = 0;
 96     int b;
 97
 98     // 初始化数据
 99     init();
100
101     // 输入起始城市编号
102     while( !input_city_num(city_num) )
103     {
104         printf( "输入有误,请重新输入!\n" );
105     }
106
107     city_num --;
108     city[city_num] = 1;
109     start = city_num;
110     pass_path[ pass_count ++ ] = city_name[city_num];
111
112     // 开始旅行规划
113     printf( "\n从城市[%c]出发\n" , city_name[city_num] );
114     printf( "\n" );
115     for( i = 0;i < 6; i ++ )
116     {
117         b = 0;
118         ret = calc_path( city_num, b );
119         if( ret > 0 && ret < 1000 )
120         {
121             path += ret;
122             printf( "当前到达%c城市\n", city_name[b] );
123             printf( "当前走过路程:%d", path );
124             printf( "\n" );
125             city_num = b;
126             pass_path[ pass_count ++ ] = city_name[city_num];
127         }
128     }
129
130     // 回到起点
131     path += city_path[start][city_num];
132     printf( "当前到达 %c 城市\n", city_name[start] );
133     printf( "当前走过路程:%d", path );
134     printf("\n");
135     pass_path[pass_count++] = city_name[start];
136
137     printf( "\n" );
138     printf( "旅行结束,总路程为:%d\n路线:", path );
139     for( i = 0; i < 7; i ++ )
140     {
141         if( i !=6 )
142             printf( "%c--->", pass_path[i] );
143         else
144             printf( "%c", pass_path[i] );
145     }
146 }
147
148 int main()
149 {
150     while(1)
151     {
152         start_travel();
153         printf("\n----------------------------------------------------\n\n");
154     }
155     return 0;
156 }

原文地址:https://www.cnblogs.com/25th-engineer/p/9823552.html

时间: 2024-10-16 14:19:21

“旅行推销商问题”简易暴力实现的相关文章

人工神经网络简介

本文主要对人工神经网络基础进行了描述,主要包括人工神经网络的概念.发展.特点.结构.模型. 本文是个科普文,来自网络资料的整理. 一.             人工神经网络的概念 人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型.该模型以并行分布的处理能力.高容错性.智能化和自学习等能力为特征,

Android开发——本地验证码的简易实现(防止暴力登录)

0.  前言   验证码无处不在,有人问我,你知道达芬奇密码下面是什么吗,对,答案就是达芬奇验证码. 验证码一个最主要的作用就是防止恶意暴力破解登录,防止不间断的登录尝试,有人说其实可以在服务器端对该终端进行登录间隔检测,如果间隔太短可以展示拒绝的姿态.但是还是本地验证码作用更加实在,可以减轻服务器端的压力.这篇将使用自定义View来实现一个如下效果的简易本地验证码.算是对自定义View知识的复习吧. 1.  布局结构   <RelativeLayout xmlns:android="ht

noip2012 开车旅行

P1081 开车旅行 139通过 484提交 题目提供者洛谷OnlineJudge 标签倍增2012NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即 d[i,j] = |Hi− Hj|. 旅行过程中,小

【BZOJ】【1050】【HAOI2006】旅行comf

枚举/暴力/Kruskal orz……我sb了……其实是sb题<_< 有一道题问的是最小极差生成树……(不记得是什么名字了,就是求最大边权与最小边权差最小的生成树)做法是枚举最小边,然后kruskal找最大边 这题同理,因为$m\leq 5000$,所以$m^2$的算法即可…… 1 /************************************************************** 2 Problem: 1050 3 User: Tunix 4 Language: C

【vijos】1746 小D的旅行(dijkstra)

https://vijos.org/p/1746 这题就是水题.裸的跑完每个点的最短路后直接可以暴力出解.. 这题贴出来是因为我改了下我的dijkstra的模板... 注意vis不要提前加.否则你懂的.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #in

TSPLIB简介与简易解析器实现

背景知识 TSP即Travelling SalesmanProblem(旅行商人问题)的简称.是数学领域中的著名问题之一.有n个城市,一个旅行商人要从其中某一个城市出发,唯一走遍所有的城市,再回到他出发的城市,求最短的路线.这个问题对快递业等行业也非常具有现实意义,当然现实中的TSP一般是动态的,要更为复杂.TSP可以分为两类,一类是对称TSP(Symmetric TSP),另一类是非对称TSP(Asymmetric TSP).区别就在于都市a到b和都市b到a的cost是否相等,相等的就是对称T

php 简易验证码(GD库)

论坛中为了防止灌水,出现了很多的验证码的插件,现在这里介绍一个非常简单的自定义验证码函数,这个验证码实现的原理就是通过php扩展的gd库来实现的. 给出百度百科对验证码的定义"验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌

codevs 1199 开车旅行 2012年NOIP全国联赛提高组

1199 开车旅行 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i, j] = |Hi − Hj|. 旅行过程中,小A 和小B轮流开

2012Noip提高组Day1 T3 开车旅行

题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即 d[i,j] = |Hi− Hj|. 旅行过程中,小 A 和小 B 轮流开车,第一天小 A 开车,之后每天轮换一次.他们计划 选择一个城市 S 作为起点,一直向东行驶,并且最多行驶 X 公里就结束旅行.小 A 和小 B