20分求救
查看原帖
20分求救
690561
违规用户名690561楼主2022/7/27 08:55

找了好久,没看出来

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int n, m, a[60], b[60], c[60], d[60], t1, t;
void DFS(int x, int y){//x是景点编号, y是总路程
	for(int k = 1;k <= m;k++){
		if(a[k] == x){
			if(d[b[k]] == 0){
//				d[a[k]] = 1;
				d[b[k]] = 1;//标记对面已访问
				DFS(b[k], y + c[k]);
//				d[a[k]] = 0;
				d[b[k]] = 0;//恢复现场
			}else{
				t1 = max(t1, y);//无路可走就结束
				return;
			}
		}else if(b[k] == x){
			if(d[a[k]] == 0){
				d[a[k]] = 1;//标记对面已访问
//				d[b[k]] = 1;
				DFS(a[k], y + c[k]);
				d[a[k]] = 0;//恢复现场
//				d[b[k]] = 0;
			}else{
				t1 = max(t1, y);//无路可走就结束
				return;
			}
		}
	}
}
int main() {
	scanf("%d %d", &n, &m);
	for(int i = 1;i <= m;i++){
		scanf("%d %d %d", &a[i], &b[i], &c[i]);
	}
	for(int j = 1;j <= n;j++){//进入DFS
		d[j] = 1;//标记起点
		DFS(j, 0);
		d[j] = 0;//恢复现场
		t = max(t1, t);//取最大值
	}
	printf("%d", t);
	return 0;
}
2022/7/27 08:55
加载中...