//回溯解法1
#include <iostream>
#include <vector>
#include <unordered_set>
#define inf INT_MAX
using namespace std;
#define n 4
vector<int> state(4,-1);//想着第i步记录第i个城市,发现这样计算时间复杂度更高,换成unordered_map
typedef unordered_set<int> usti;
usti node{0,1,2,3};
vector<vector<int>> dist={{0,5,9,4},
{5,0,13,2},
{9,13,0,7},
{4,2,7,0}};
int cur_dist=0;
int min_dist=inf;
int beg_node=0;//出发节点,可以变更的
void solve(int st,usti nod)
{
usti node =nod;
node.erase(st);
state[n-node.size()]=st;
if(node.empty())
{
if(dist[st][beg_node]<inf and min_dist>cur_dist+dist[st][beg_node])
min_dist=cur_dist+dist[st][beg_node];
}
for(usti::iterator it=node.begin();it!=node.end();it++)
{
if(dist[st][*it]<inf&&cur_dist+dist[st][*it]<min_dist)
{
cur_dist+=dist[st][*it];
solve(*it,node);
cur_dist-=dist[st][*it];//当前层次换元素重新迭代
}
}
}
int main() {
//vector<int> state(4,-1);
solve(beg_node,node);
cout<<min_dist;
std::cout << "Hello, World!" << std::endl;
return 0;
}
浙公网安备 33010602011771号