亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言使用回溯法解旅行售貨員問題與圖的m著色問題

2020-01-26 14:31:51
字體:
來源:轉載
供稿:網友

旅行售貨員問題
1.問題描述:

旅行售貨員問題又稱TSP問題,問題如下:某售貨員要到若干個城市推銷商品,已知各城市之間的路程(或旅費),他要選定一條從駐地出發,經過每個城市一遍最后回到駐地的路線,使總的路線(或總的旅費)最小。數學模型為給定一個無向圖,求遍歷每一個頂點一次且僅一次的一條回路,最后回到起點的最小花費。

2.輸入要求:

輸入的第一行為測試樣例的個數T( T < 120 ),接下來有T個測試樣例。每個測試樣例的第一行是無向圖的頂點數n、邊數m( n < 12,m < 100 ),接下來m行,每行三個整數u、v和w,表示頂點u和v之間有一條權值為w的邊相連。( 1 <= u < v <= n,w <= 1000 )。假設起點(駐地)為1號頂點。

3.輸出要求:

對應每個測試樣例輸出一行,格式為"Case #: W",其中'#'表示第幾個測試樣例(從1開始計),W為TSP問題的最優解,如果找不到可行方案則輸出-1。

4.樣例輸入:

25 81 2 51 4 71 5 92 3 102 4 32 5 63 4 84 5 43 11 2 10

5.樣例輸出:

Case 1: 36Case 2: -1

6.解決方法:

//旅行售貨員問題 (回溯)#include<iostream> #define N 100 using namespace std; int n,m,w,      //圖的頂點數和邊數  graph[N][N],   //圖的加權鄰接矩陣  c=0,       //當前費用  bestc=-1,     //當前最優值  x[N],      //當前解  bestx[N];    //當前最優解void backtrack(int k); void swap(int &a,int &b); void swap(int &a,int &b) {   int temp=a;   a=b;   b=temp; } void backtrack(int k) {   if(k==n)   {     if( (c+graph[x[n-1]][x[n]]+graph[x[n]][1]<bestc||bestc==-1) && graph[x[n-1]][x[n]]!=-1 && graph[x[n]][1]!=-1 )     {       bestc=c+graph[x[n-1]][x[n]]+graph[x[n]][1];       for(int i=1;i<=n;i++)       {         bestx[i]=x[i];       }     }     return ;   }   else   {     for(int i=k;i<=n;i++)     {       if( graph[x[k-1]][x[i]]!=-1 && (c+graph[x[k-1]][x[i]]<bestc || bestc==-1))       {         swap(x[i],x[k]);         c+=graph[x[k-1]][x[k]];         backtrack(k+1);         c-=graph[x[k-1]][x[k]];         swap(x[i],x[k]);       }     }   } } int main(void){  int i,j,tmp=1,testNum;  cin>>testNum;  while(tmp<=testNum)  {    cin>>n>>m;    for(i=1;i<=n;i++)    for(j=1;j<=n;j++)    graph[i][j]=-1;    for(int k=1;k<=m;k++)    {      cin>>i>>j>>w;      graph[i][j]=w;      graph[j][i]=w;    }    for(i=1;i<=n;i++)    {      x[i]=i;      bestx[i]=i;    }    backtrack(2);    cout<<"Case "<<tmp<<": "<<bestc<<endl;    bestc=-1;    c=0;        tmp++;  }      return 0;}

圖的m著色問題
1.問題描述
給定無向連通圖G和m種不同的顏色。用這些顏色為圖G的各頂點著色,每個頂點著一種顏色。是否有一種著色法使G中每條邊的2個頂點著不同顏色,求有多少種方法為圖可m著色。

2.輸入要求:
輸入的第一個為測試樣例的個數T ( T < 120 ),接下來有T個測試樣例。每個測試樣例的第一行是頂點數n、邊數M和可用顏色數m( n <= 10,M < 100,m <= 7 ),接下來M行,每行兩個整數u和v,表示頂點u和v之間有一條邊相連。( 1 <= u < v <= n )。

3.輸出要求:
對應每個測試樣例輸出兩行,第一行格式為"Case #: W",其中'#'表示第幾個測試樣例(從1開始計),W為可m著色方案數。

4.樣例輸入:

15 8 51 21 31 42 32 42 53 44 5

5.樣例輸出:

Case 1: 360

6.解決方法:

#include<iostream>using namespace std;#define N 100int m,n,M,a[N][N],x[N],textNum;int static sum=0;bool ok(int k){  for(int j=1;j<=n;j++)  if(a[k][j]&&(x[j]==x[k]))  return false;  return true;}void backtrack(int t){  if(t>n)  {    sum++;    // for(int i=1;i<=n;i++)    //cout<<x[i]<<" ";    //cout<<endl;  }  else  for(int i=1;i<=m;i++)  {    x[t]=i;    if(ok(t))    backtrack(t+1);    x[t]=0;  }}int main(){  int i,j,z=1;  cin>>textNum;         //輸入測試個數  while(textNum>0)  {    cin>>n;          //輸入頂點個數    for(i=1;i<=n;i++)    for(j=1;j<=n;j++)    a[i][j]=0;    cin>>M>>m;         //輸入邊的個數、可用顏色數    for(int k=1;k<=M;k++)   //生成圖的鄰接矩陣    {      cin>>i>>j;      a[i][j]=1;      a[j][i]=1;    }    /* for(i=1;i<=n;i++){      for(j=1;j<=n;j++)      cout<<a[i][j]<<" ";    cout<<endl;}*/    for(i=0;i<=n;i++)    x[i]=0;    backtrack(1);    cout<<"Case "<<z<<": "<<sum<<endl;    sum=0;            textNum--;    z++;  }      return 0;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
26uuu日韩精品一区二区| 国产精品亚洲自拍| 成人精品视频久久久久| 欧美视频中文在线看| 日韩精品在线视频| 77777少妇光屁股久久一区| 日韩精品欧美激情| 欧美激情视频一区| 尤物精品国产第一福利三区| 亚洲va欧美va国产综合久久| 精品久久久一区二区| 九色精品免费永久在线| 国产精品视频26uuu| 欧美视频在线观看 亚洲欧| 国产精品欧美一区二区三区奶水| 久久久精品久久| 久久福利网址导航| 黑人巨大精品欧美一区二区| 中文精品99久久国产香蕉| 国产精品xxx视频| 亚洲第一页在线| 久久人人爽人人爽人人片av高清| 久久免费观看视频| 国产日产欧美精品| 成人精品一区二区三区| 精品自在线视频| 国产精品久久久久999| 国产欧洲精品视频| 日韩美女视频中文字幕| 欧美一级大片在线免费观看| www.99久久热国产日韩欧美.com| 日韩经典一区二区三区| 亚洲国产第一页| 色噜噜狠狠狠综合曰曰曰| 日韩高清免费观看| 欧洲精品毛片网站| 国产精品成av人在线视午夜片| 日韩在线视频免费观看高清中文| 日韩精品极品毛片系列视频| 在线电影av不卡网址| 国产视频精品va久久久久久| 欧美成人免费观看| 午夜欧美大片免费观看| 大桥未久av一区二区三区| 欧美精品videosex极品1| 欧美一级在线播放| 91精品视频免费看| 欧美www视频在线观看| 亚洲第一精品自拍| 97婷婷涩涩精品一区| 国产丝袜一区二区三区| 亚洲伦理中文字幕| 亚洲欧美激情在线视频| 国产精品久久久久久久久男| 国产精品电影一区| 亚洲aⅴ日韩av电影在线观看| 亚洲片在线资源| 国产乱肥老妇国产一区二| 国产精品精品视频| 98精品国产高清在线xxxx天堂| 欧美日韩国产色| 久久久久久亚洲精品中文字幕| 精品欧美国产一区二区三区| 亚洲美女激情视频| 在线观看欧美成人| 午夜免费在线观看精品视频| 欧美精品日韩三级| 亚洲第一精品福利| 亚洲最大福利视频网站| 亚洲第一精品久久忘忧草社区| 亚洲白虎美女被爆操| 日韩中文字幕在线视频播放| 7m第一福利500精品视频| 国产国语刺激对白av不卡| 成人h片在线播放免费网站| 亚洲成人a级网| 日韩久久免费视频| 美女撒尿一区二区三区| 欧美成在线观看| 日韩免费不卡av| 日韩**中文字幕毛片| 日韩电影免费在线观看中文字幕| 欧美日韩亚洲精品内裤| 亚洲男人天堂2019| 成人a视频在线观看| 日韩在线欧美在线| 日韩美女视频免费在线观看| 91夜夜揉人人捏人人添红杏| 欧美福利小视频| 欧美大尺度激情区在线播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久免费少妇高潮久久精品99| 精品国产一区二区三区久久| 国产午夜精品一区理论片飘花| 98精品国产高清在线xxxx天堂| 亚洲欧美在线一区| 久久免费福利视频| 日韩成人激情在线| 久久精品国产亚洲7777| 国产精品视频精品视频| 亚洲电影免费观看高清完整版在线| 国产欧美日韩亚洲精品| 精品香蕉在线观看视频一| 性欧美xxxx视频在线观看| 日韩中文在线中文网在线观看| 欧美午夜久久久| 国产精品入口免费视| 精品中文字幕久久久久久| 成人激情视频在线| 国产v综合v亚洲欧美久久| 91在线精品播放| 成人黄色生活片| 久久国产精品亚洲| 亚洲精品电影在线观看| 色播久久人人爽人人爽人人片视av| 色777狠狠综合秋免鲁丝| 欧美另类交人妖| 国产免费一区二区三区在线观看| 久久视频免费观看| 久久激情视频免费观看| 亚洲精品免费av| 久久久国产精品一区| 国产精品扒开腿做爽爽爽男男| 日韩亚洲精品视频| 午夜精品福利在线观看| 亚洲第一av网| 97视频在线观看免费高清完整版在线观看| 国产精品一二三视频| 最新中文字幕亚洲| 日本精品久久中文字幕佐佐木| 久久99亚洲热视| 91极品女神在线| 国产综合在线视频| 91久久精品久久国产性色也91| 北条麻妃一区二区在线观看| 在线视频中文亚洲| 97久久久久久| 日韩精品中文在线观看| 欧美激情一区二区三区久久久| 色偷偷偷综合中文字幕;dd| 成人春色激情网| 日韩av一区在线| 亚洲欧洲成视频免费观看| 国产精品海角社区在线观看| 91av在线免费观看| 国产成人福利视频| 色综合久综合久久综合久鬼88| 日韩av不卡电影| 97国产一区二区精品久久呦| 91精品国产综合久久香蕉922| 久久精品免费播放| 欧美性受xxxx白人性爽| 最新亚洲国产精品| 国产在线播放91| 日韩视频一区在线| 国产一区视频在线| 成人性教育视频在线观看| 国产欧美日韩精品在线观看| 亚洲欧洲偷拍精品| 亚洲视频在线观看视频| 亚洲成人久久电影| 中文字幕av一区二区三区谷原希美| 国产精品电影在线观看| 亚洲精品免费在线视频|