题目详情 - L2-036 网红点打卡攻略 (pintia.cn)
先判断攻略的个数是否与网红点数相同,然后判断攻略的点是否有重复,最后计算合法的攻略距离并取最小
#include<iostream>
#include<vector>
#include<cstring>
#include<set>
using namespace std;
const int N = 210,INF = 0x3f3f3f3f;
int n,m,idx,res = INF;
int g[N][N];
bool book[N];
bool check(vector<int> &gl,int id){
if(gl.size() != n) return false;
memset(book,0,sizeof book);
for(int i = 1; i < gl.size(); i++){
if(book[gl[i]]) return false;
else book[gl[i]] = true;
}
int now = 0, sum = 0;
for(auto num:gl){
if(g[now][num] == INF) return false;
sum += g[now][num];
now = num;
}
if(g[now][0] == INF) return false;
sum += g[now][0];
if(res > sum) {
res = sum;
idx &#