POJ 2197题意:
给定n个城市及其之间的距离,以及距离限制len 初始点s, 结束点e,
要求求出从s到e的所有不大于len的路径并输出,按照距离从小到大输出,如果距离相等,
就按照路径的字典升序输出。
样例:
Sample Input
4 5 4个顶点,5条边
1 2 2 顶点1到2之间的距离为2
1 3 3
1 4 1
2 3 2
3 4 4
1 3 //起点和终点
4 //距离限制
-1
Sample Output
Case 1:
3: 1 3
4: 1 2 3
思路:明显DFS+记录路径。
- import java.util.*;
- public class Main{
- static final int INF=100000;
- Point arr[];//记录符合条件所有解(终点)
- int v,s,e,len;//顶点数,起点,终点,距离限定
- int map[][];//城市的邻接矩阵
- boolean f[];//深搜时记录顶点是否访问过
- int x[];//用于记录从起点到终点的路径
- int ii;//arr[]的下标,从0开始符合条件
- static int counter = 0;
- public Main(int v,int s,int e,int len,int[][] map){
- this.v=v;//顶点数
- this.s=s;//起点
- this.e=e;//终点
- this.len=len;//距离限定
- this.map=map;//图的邻接矩阵
- f =new boolean[v+1];
- x=new int[v+1];
- arr=new Point[4000];
- for(int i=0;i<4000;i++)
- arr[i]=new Point();
- }
- public static void main(String[] args){
- Scanner in=new Scanner(System.in);
- int v, r,s, e,len;//r:边的数目
- int[][] map;
- while(true)
- {
- v=in.nextInt();
- if(v==-1) break;
- r=in.nextInt();
- map=new int[v+1][v+1];//邻接矩阵
- for(int i=1;i<=v;i++)
- {
- for(int j=1;j<=v;j++)
- {
- map[i][j] = INF;
- }
- }
- for(int i=0;i<r;i++)
- {
- int a,b,c;
- a=in.nextInt();
- b=in.nextInt();
- c=in.nextInt();
- map[a][b] = map[b][a] = c;//这是无向图
- }
- s=in.nextInt();
- e=in.nextInt();
- len=in.nextInt();
- Main m=new Main(v,s,e,len,map);
- m.go();
- }
- }