日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TSP问题(贪心法)最近邻点和最短连接

發(fā)布時(shí)間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TSP问题(贪心法)最近邻点和最短连接 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.最近鄰點(diǎn)法 (貪心策略 TSP)

2. 最短連接 TSP問(wèn)題 貪心算法

#include<stdio.h> #include<iostream> using namespace std;//采用最近鄰點(diǎn)貪心策略求TSP問(wèn)題。 int TSP1(double arc[6][6],int w)//假定從頂點(diǎn)w出發(fā) {int n=6;int edgeCount=0;//哈密頓回路的邊數(shù) int TSPLength=0;int min,u,v;int flag[n]={0}; // 頂點(diǎn)均未加入哈密頓回路u=w;//w為出發(fā)點(diǎn) u為加入到哈密頓回路的點(diǎn) flag[w]=1; while(edgeCount<n-2) //已經(jīng)加入一個(gè)出發(fā)點(diǎn),只需要再4個(gè)點(diǎn) 0 1 2 3 四次找點(diǎn){min=100;for(int j=1;j<n;j++) //求arc[u]的最小值 {if((flag[j]==0) && (arc[u][j]!=0) &&((arc[u][j]!=100e5))&& (arc[u][j]<min)) //j點(diǎn)沒(méi)有被加入哈密頓回路 排除自己 找到最小值 {v=j;//v點(diǎn)最終是距離u點(diǎn)最近的點(diǎn) min=arc[u][j];}} //找到距離u點(diǎn)的最近的點(diǎn),把它加入哈密頓回路TSPLength+=arc[u][v];flag[v]=1;edgeCount++;cout<<u<<"-->"<<v<<endl; u=v; //把v點(diǎn)賦值給u,接下來(lái)找距離v點(diǎn)最近的點(diǎn) while循環(huán)控制直到所有點(diǎn)都被加入進(jìn)去 }cout<<v<<"-->"<<w<<endl;//輸出最后的回邊return (TSPLength+arc[u][w]);//返回最終的最短哈密頓回路的長(zhǎng)度!! } int main() {double arc[6][6]={{0,0,0,0,0,0},{0,100e5,3,3,2,6},{0,3,100e5,7,3,2},{0,3,7,100e5,2,5},{0,2,3,2,100e5,3},{0,6,2,5,3,100e5}};int n2=TSP1(arc,1);cout<<n2; } #include<stdio.h> #include<iostream> #include<malloc.h> using namespace std;//查找最小邊函數(shù) Search pair<int,int> Search(int **A,int N,int *flag,int **AF) { //查找最小邊int min=10e5,a=0,b=0;for(int i=0; i<N; i++) {for(int j=0; j<i; j++) {if(!AF[i][j]&&flag[i]<2&&flag[j]<2&& A[i][j]<min) {//如果這條邊沒(méi)有走過(guò),兩邊的城市沒(méi)有同時(shí)有兩個(gè)被走過(guò)的邊 a=i; b=j;min=A[i][j];//依次比較 }}}flag[a]++;flag[b]++;AF[a][b]=1;return pair<int,int>(a,b); }//TSP2 int TSP2(int **A,int N,int *flag,int **AF) {int tsp=0,i,j,k;for(k=0; k<N; k++) {//選擇N次最短邊 pair<int,int> a=Search(A,N,flag,AF);tsp+=A[a.first][a.second];//每次加入最增的最短邊 }return tsp; }int main() {//N初始化int N=5; //A初始化(城市之間的距離)int **A=(int **)malloc(N*sizeof(int));cout<<"輸入5個(gè)城市之間的距離(0表示城市間不通):"<<endl;for(int i=0;i<N;i++){A[i]=(int*)malloc(N*sizeof(int));for(int j=0;j<N;j++){cin>>A[i][j];}} //AF初始化,記錄邊是否走過(guò) int **AF=(int **)malloc(N*sizeof(int));//記是否邊走過(guò),初始值設(shè)為0,走過(guò)設(shè)為1for(int i=0;i<N;i++){AF[i]=(int*)malloc(N*sizeof(int));for(int j=0;j<N;j++){AF[i][j]=0;}}//flag初始化,記錄城市是否走過(guò) int *flag=(int *)malloc(N*sizeof(int));//標(biāo)記是否城市走過(guò),初始值設(shè)為0,走進(jìn)去又走出來(lái)成為2 for(int i=0;i<N;i++)//設(shè)置flag的初值 {flag[i]=0;}cout<<"最短路徑長(zhǎng)度:";cout<<TSP2(A,N,flag,AF);}

總結(jié)

以上是生活随笔為你收集整理的TSP问题(贪心法)最近邻点和最短连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。