生活随笔
收集整理的這篇文章主要介紹了
算法设计TSP问题动态规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream>
#include <cmath>
using namespace std
;
int distanceTable
[100][100];
int distanceMatrix
[10][10];
int N
;
int path
[100][100];
int cinDistance(){cout
<<"請輸入城市個數"<<endl
;cin
>>N
;cout
<<"請輸入城市距離的代價矩陣"<<endl
;for (int i
= 0; i
< N
; ++i
) {for (int j
= 0; j
< N
; ++j
) {cin
>>distanceMatrix
[i
][j
];}}for (int k
= 0; k
< N
; ++k
) {distanceMatrix
[k
][k
] = 0;}cout
<<"您的代價矩陣已被規范化"<<endl
;for (int i
= 0; i
< N
; ++i
) {for (int j
= 0; j
< (int)pow(2,N
); ++j
) {distanceTable
[i
][j
] = -1;}}return 0;
}int exist(int i
,int j
){if((int)pow(2,i
- 1)&j
)return 1;else return 0;
}int TSP(){for (int i
= 1; i
< N
; ++i
) {distanceTable
[i
][0] = distanceMatrix
[i
][0];}
for (int j
= 1; j
< (int)pow(2,N
- 1); ++j
) {for (int i
= 1; i
< N
; ++i
) {int min
= 10000;if(!exist(i
,j
)){for (int k
= 1; k
< N
; ++k
) {if(exist(k
,j
)){int d
= distanceMatrix
[i
][k
] + distanceTable
[k
][j
- (int)pow(2,k
- 1)];if(d
< min
){path
[i
][j
] = k
;min
= d
;}}}distanceTable
[i
][j
] = min
;}}}
int min
= 1000;for (int k
= 1; k
< N
; ++k
) {int d
= distanceMatrix
[0][k
] + distanceTable
[k
][((int)pow(2,N
- 1) - 1) - (int)pow(2,k
- 1)];if(d
< min
){min
= d
;path
[0][(int)pow(2,N
- 1) - 1] = k
;}}distanceTable
[0][((int)pow(2,N
- 1) - 1)] = min
;return 0;
}int coutResult(){for (int i
= 0; i
< N
; ++i
) {for (int j
= 0; j
< (int)pow(2,N
- 1); ++j
) {cout
<<distanceTable
[i
][j
]<<'\t';}cout
<<endl
;}cout
<<"0->";int i
= 0;for (int j
= (int)pow(2,N
- 1) - 1; j
> 0;) {i
= path
[i
][j
];cout
<<i
<<"->";j
= j
- (int)pow(2,i
- 1);}cout
<<"0"<<endl
;return 0;
}int main()
{cinDistance();TSP();coutResult();return 0;
}
總結
以上是生活随笔為你收集整理的算法设计TSP问题动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。