回溯法—-旅行售貨員問題

來源:互聯網
上載者:User

一、問題

 

      同文章 <分支限界法----旅行售貨員問題>

 

二、代碼實現

       程式實現了 遞迴回溯 解決該問題

       迭代回溯演算法仍在考慮中...

/****************************************************************<br /> *問 題:旅行售貨員<br /> *算 法:回溯法<br /> *描 述:解空間為 排列樹<br /> ****************************************************************/<br />#include <stdio.h><br />#define N 4 //城市數目<br />#define NO_PATH -1 //沒有通路<br />#define MAX_WEIGHT 4000<br />int City_Graph[N+1][N+1]; //儲存圖資訊<br />int x[N+1]; //x[i]儲存第i步遍曆的城市<br />int isIn[N+1]; //儲存 城市i是否已經加入路徑<br />int bestw; //最優路徑總權值<br />int cw; //當前路徑總權值<br />int bestx[N+1]; //最優路徑<br />//-----------------------------------------------------------------<br />void Travel_Backtrack(int t){ //遞迴法<br />int i,j;<br />if(t>N){ //走完了,輸出結果<br />for(i=1;i<=N;i++) //輸出當前的路徑<br />printf("%d ",x[i]);<br />printf("/n");<br />if(cw < bestw){ //判斷當前路徑是否是更優解<br />for (i=1;i<=N;i++){<br />bestx[i] = x[i];<br />}<br />bestw = cw;<br />}<br />return;<br />}<br />else{<br />for(j=1;j<=N;j++){ //找到第t步能走的城市<br />if(City_Graph[x[t-1]][j] != NO_PATH && !isIn[j]){ //能到而且沒有加入到路徑中<br />isIn[j] = 1;<br />x[t] = j;<br />cw += City_Graph[x[t-1]][j];<br />Travel_Backtrack(t+1);<br />isIn[j] = 0;<br />x[t] = 0;<br />cw -= City_Graph[x[t-1]][j];<br />}<br />}<br />}<br />}<br />void main(){<br />int i;<br />City_Graph[1][1] = NO_PATH;<br />City_Graph[1][2] = 30;<br />City_Graph[1][3] = 6;<br />City_Graph[1][4] = 4;</p><p>City_Graph[2][1] = 30;<br />City_Graph[2][2] = NO_PATH;<br />City_Graph[2][3] = 5;<br />City_Graph[2][4] = 10;<br />City_Graph[3][1] = 6;<br />City_Graph[3][2] = 5;<br />City_Graph[3][3] = NO_PATH;<br />City_Graph[3][4] = 20;</p><p>City_Graph[4][1] = 4;<br />City_Graph[4][2] = 10;<br />City_Graph[4][3] = 20;<br />City_Graph[4][4] = NO_PATH;<br />//測試遞迴法<br />for (i=1;i<=N;i++){<br />x[i] = 0; //表示第i步還沒有解<br />bestx[i] = 0; //還沒有最優解<br />isIn[i] = 0; //表示第i個城市還沒有加入到路徑中<br />}</p><p>x[1] = 1; //第一步 走城市1<br />isIn[1] = 1; //第一個城市 加入路徑<br />bestw = MAX_WEIGHT;<br />cw = 0;<br />Travel_Backtrack(2); //從第二步開始選擇城市<br />printf("最優值為%d/n",bestw);<br />printf("最優解為:/n");<br />for(i=1;i<=N;i++){<br />printf("%d ",bestx[i]);<br />}<br />printf("/n");<br />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.