窮舉法解決旅行商問題

來源:互聯網
上載者:User

標籤:

一、問題描述

,一個旅行商從A點出發,需要不重複地走遍5個城市ABCDE,最後回到A。每個城市之間的花費(即權值),現在要求找出一條總花費最小的路徑,即權值和為最小的路徑。

二、     演算法說明

1.    演算法一: 登山法(貪進法)

    即在每一個城市出發前比較接下來所能走的城市花費(權值),找出權值最小的走。

優缺點:由於只是在每個城市局部地考慮權值最小,但當走完所用城市後,所得到權值和不一定為最小,所以採用此演算法得不到精確解,但此演算法複雜度較低。

2.  演算法二:窮舉法(本程式採用此演算法)

即計算出每條路徑的權值和,選權值和最小的路徑為最佳路徑。

優缺點:此演算法可以得到精確解,但由於採用的是窮舉,所以複雜度較高。

三、源碼樣本

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6   7 namespace 旅行商問題  8 {  9     class Program 10     { 11         static void Main(string[] args) 12         { 13             //權值矩陣 14             int[,] weightValue = new int[10, 10]; 15             //城市數量 16             int cityNum = 0; 17             //城市名稱 18             string[] cityName = new string[10]; 19             //出發城市 用索引表示 20             int beginCityIndex = 0; 21             //權值 22             int minWeightValue = int.MaxValue; 23             int weightSum = minWeightValue; 24             //最佳路徑 25             int[] bestWay; 26  27             //輸入城市數量 28             Console.WriteLine("請輸入城市數量:"); 29             cityNum = int.Parse(Console.ReadLine()); 30             Console.WriteLine("請輸入各個城市名稱"); 31             for (int i = 0; i < cityNum; i++) 32             { 33                 cityName[i] = Console.ReadLine(); 34             } 35             Console.WriteLine("請輸入權值矩陣:"); 36             //輸入權值矩陣 37             for (int i = 0; i < cityNum; i++) 38             { 39                 for (int j = 0; j < cityNum; j++) 40                 { 41                     weightValue[i, j] = int.Parse(Console.ReadLine()); 42                 } 43             } 44             //輸入出發城市 45             Console.WriteLine("請輸入出發城市:"); 46             beginCityIndex = int.Parse(Console.ReadLine()); 47  48             bestWay = new int[cityNum+1]; 49  50             for (int i = 0; i < cityNum; i++) 51             { 52                 if (i != beginCityIndex) 53                 { 54                     for (int j = 0; j < cityNum; j++) 55                     { 56                         if (j != i && j != beginCityIndex) 57                         { 58                             for (int k = 0; k < cityNum; k++) 59                             { 60                                 if(k!=j && k!=i && k!=beginCityIndex) 61                                 { 62                                     for (int t = 0; t < cityNum; t++) 63                                     { 64                                         if(t!=i && t!=j && t!=k && t!=beginCityIndex) 65                                         { 66                                             weightSum = weightValue[beginCityIndex,i] 67                                                 +weightValue[i,j] 68                                                 +weightValue[j,k] 69                                                 +weightValue[k,t] 70                                                 +weightValue[t,beginCityIndex]; 71                                             if(minWeightValue>weightSum) 72                                             { 73                                                 minWeightValue=weightSum; 74                                                 bestWay[0] = beginCityIndex; 75                                                 bestWay[1] = i; 76                                                 bestWay[2] = j; 77                                                 bestWay[3] = k; 78                                                 bestWay[4] = t; 79                                                 bestWay[5] = beginCityIndex; 80                                             } 81                                         } 82                                     } 83                                 } 84                             } 85                         } 86                     } 87                 } 88             } 89  90  91             Console.WriteLine("最短路徑為:"); 92             Console.WriteLine(cityName[bestWay[0]]+"->" 93                              + cityName[bestWay[1]] + "->" 94                              + cityName[bestWay[2]] + "->" 95                              + cityName[bestWay[3]] + "->" 96                              + cityName[bestWay[4]] + "->" 97                              + cityName[bestWay[5]]); 98  99             Console.WriteLine("最小權值為{0}", minWeightValue);100 101             Console.ReadKey();102         }103     }104 }
View Code

 

窮舉法解決旅行商問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.