码迷,mamicode.com
首页 > 其他好文 > 详细

SDUT 3363 数据结构实验之图论七:驴友计划

时间:2016-11-10 02:44:41      阅读:399      评论:0      收藏:0      [点我收藏+]

标签:计划   script   min   距离   matrix   space   desc   info   情况   

数据结构实验之图论七:驴友计划

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

做为一个资深驴友,小新有一张珍藏的自驾游线路图,图上详细的标注了全国各个城市之间的高速公路距离和公路收费情况,现在请你编写一个程序,找出一条出发地到目的地之间的最短路径,如果有多条路径最短,则输出过路费最少的一条路径。

Input

连续T组数据输入,每组输入数据的第一行给出四个正整数N,M,s,d,其中N(2 <= N <= 500)是城市数目,城市编号从0~N-1,M是城市间高速公路的条数,s是出发地的城市编号,d是目的地的城市编号;随后M行,每行给出一条高速公路的信息,表示城市1、城市2、高速公路长度、收费额,中间以空格间隔,数字均为整数且不超过500,输入数据均保证有解。 

Output

在同一行中输出路径长度和收费总额,数据间用空格间隔。 

Example Input

1
4 5 0 3
0 1 1 20
1 3 2 30
0 3 4 10
0 2 2 20
2 3 1 20

Example Output

3 40

DQE:

深度优先搜索,搜索过程中的回退需要清除相关标记,值得一看~
 
  1 #include <iostream>
  2 #include <cstdio>
  3 #include <climits>
  4 
  5 using namespace std;
  6 
  7 #define MVN 550
  8 
  9 typedef struct AdjMatrix
 10 {
 11     int w;
 12     int m;
 13     char *info;
 14 }AM;
 15 
 16 typedef struct MGraph
 17 {
 18     int vex[MVN];
 19     AM arc[MVN][MVN];
 20     int vexnum,arcnum;
 21     int s,d;
 22     int w,m;
 23     int minw,minm;
 24 }MG;
 25 
 26 void creat(MG &G)
 27 {
 28     int i,j,w,m,k;
 29     for(k=0;k<G.vexnum;k++)
 30         G.vex[k]=k;
 31     for(k=0;k<G.arcnum;k++)
 32     {
 33         scanf("%d %d %d %d",&i,&j,&w,&m);
 34         G.arc[i][j].w=w;
 35         G.arc[i][j].m=m;
 36         G.arc[j][i].w=w;
 37         G.arc[j][i].m=m;
 38     }
 39 }
 40 
 41 void DFS(MG &G,bool *visited,int i)
 42 {
 43     visited[i]=true;
 44     if(i==G.d)
 45     {
 46         if(G.w<G.minw || G.w==G.minw && G.m<G.minm)
 47         {
 48             G.minw=G.w;
 49             G.minm=G.m;
 50         }
 51     }
 52     else
 53     {
 54         int k;
 55         for(k=0;k<G.vexnum;k++)
 56         {
 57             if(G.arc[i][k].w<INT_MAX&&visited[k]==false)
 58             {
 59                 G.w+=G.arc[i][k].w;
 60                 G.m+=G.arc[i][k].m;
 61                 DFS(G,visited,k);
 62 
 63                 visited[k]=false;        //※探索不同路径后的回退操作※
 64                 G.w-=G.arc[i][k].w;
 65                 G.m-=G.arc[i][k].m;
 66             }
 67         }
 68     }
 69 }
 70 
 71 int main()
 72 {
 73     int t;
 74     scanf("%d",&t);
 75     while(t--)
 76     {
 77         MG G={0};
 78         scanf("%d %d %d %d",&G.vexnum,&G.arcnum,&G.s,&G.d);
 79         int k,o;
 80         for(k=0;k<G.vexnum;k++)
 81         {
 82             for(o=0;o<G.vexnum;o++)
 83                 G.arc[k][o].w=INT_MAX;
 84         }//初始化邻接矩阵
 85         creat(G);
 86         bool visited[MVN]={false};
 87         G.minm=INT_MAX;        //初始化一个最大值
 88         G.minw=INT_MAX;
 89         DFS(G,visited,G.s);
 90         printf("%d %d\n",G.minw,G.minm);
 91     }
 92     return 0;
 93 }
 94 
 95 /***************************************************
 96 User name: ***
 97 Result: Accepted
 98 Take time: 0ms
 99 Take Memory: 2832KB
100 Submit time: 2016-11-09 22:46:01
101 ****************************************************/

 

SDUT 3363 数据结构实验之图论七:驴友计划

标签:计划   script   min   距离   matrix   space   desc   info   情况   

原文地址:http://www.cnblogs.com/Mimick/p/6049201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!