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+记录路径。

Java代码 图的深搜+回溯练习题:POJ2197 _的 图的深搜+回溯练习题:POJ2197 _练习题_02
  1. import java.util.*;
  2. public class Main{
  3. static final int INF=100000;
  4. Point arr[];//记录符合条件所有解(终点)
  5.  
  6. int v,s,e,len;//顶点数,起点,终点,距离限定
  7. int map[][];//城市的邻接矩阵
  8. boolean f[];//深搜时记录顶点是否访问过
  9. int x[];//用于记录从起点到终点的路径
  10. int ii;//arr[]的下标,从0开始符合条件
  11. static int counter = 0;
  12.  
  13. public Main(int v,int s,int e,int len,int[][] map){
  14. this.v=v;//顶点数
  15. this.s=s;//起点
  16. this.e=e;//终点
  17. this.len=len;//距离限定
  18. this.map=map;//图的邻接矩阵
  19. f =new boolean[v+1];
  20. x=new int[v+1];
  21. arr=new Point[4000];
  22. for(int i=0;i<4000;i++)
  23. arr[i]=new Point();
  24. }
  25.  
  26. public static void main(String[] args){
  27. Scanner in=new Scanner(System.in);
  28. int v, r,s, e,len;//r:边的数目
  29. int[][] map;
  30. while(true)
  31. {
  32. v=in.nextInt();
  33. if(v==-1) break;
  34. r=in.nextInt();
  35. map=new int[v+1][v+1];//邻接矩阵
  36. for(int i=1;i<=v;i++)
  37. {
  38. for(int j=1;j<=v;j++)
  39. {
  40. map[i][j] = INF;
  41. }
  42. }
  43. for(int i=0;i<r;i++)
  44. {
  45. int a,b,c;
  46. a=in.nextInt();
  47. b=in.nextInt();
  48. c=in.nextInt();
  49. map[a][b] = map[b][a] = c;//这是无向图
  50. }
  51. s=in.nextInt();
  52. e=in.nextInt();
  53. len=in.nextInt();
  54. Main m=new Main(v,s,e,len,map);
  55. m.go();
  56. }
  57. }