1 条题解
-
0
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; int b[25]; int map[25][25]; int a[25][25]; int st,en; int n,m; int len,cnt; struct point { int path[25]; int length; }; bool vis[25]; vector<point> v; void dfs(int x,point p,int l) { if(x==en) { v.push_back(p); return; } for(int i=1; i<=a[x][0]; i++) if(!vis[a[x][i]]&&l+map[x][a[x][i]]<=len) { vis[a[x][i]] = 1; p.length+=map[x][a[x][i]]; p.path[++p.path[0]] = a[x][i]; dfs(a[x][i],p,l+map[x][a[x][i]]); p.path[0]--; p.length-=map[x][a[x][i]]; vis[a[x][i]] = 0; } } int cmp(const point &a,const point b) { if(a.length==b.length) { for(int i=1; i<=a.path[0]&&i<=b.path[0]; i++) if(a.path[i]==b.path[i]) continue; else return a.path[i]<b.path[i]; } return a.length<b.length; } int main() { int cas = 0; while(scanf("%d",&n)&&n>0) { scanf("%d",&m); memset(map,0,sizeof(map)); memset(a,0,sizeof(a)); while(m--) { int x,y,z; scanf("%d%d%d",&x,&y,&z); map[x][y] = map[y][x] = z; a[x][++a[x][0]] = y; a[y][++a[y][0]] = x; } scanf("%d%d",&st,&en); scanf("%d",&len); point p; p.length = 0; p.path[0] = 1; p.path[1] = 1; memset(vis,0,sizeof(vis)); vis[1] = 1; dfs(1,p,0); if(cas) puts(""); printf("Case %d:\n",++cas); int size = v.size(); if(size==0) { printf(" NO ACCEPTABLE TOURS\n"); continue; } sort(v.begin(),v.end(),cmp); for(int i=0; i<size; i++) { point tmp = v[i]; printf(" %d:",tmp.length); for(int j=1; j<=tmp.path[0]; j++) printf(" %d",tmp.path[j]); puts(""); } v.clear(); } return 0; }
- 1
信息
- ID
- 1198
- 时间
- 10000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 11
- 已通过
- 1
- 上传者