SDUT 3363 数据结构实验之图论七:驴友计划
数据结构实验之图论七:驴友计划
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:
#include <iostream>
#include <cstdio>
#include <climits> using namespace std; #define MVN 510 typedef struct AdjMatrix
{
int w; //距离
int m; //费用
char *info;
}AM; typedef struct MGraph
{
int vex[MVN];
AM arc[MVN][MVN];
int vexn,arcn;
int s,e; //起点,终点(编号-下标)
}MG; void creat(MG &G)
{
int i,j,w,m,k;
for(i=;i<G.vexn;i++)
for(j=;j<G.vexn;j++)
{
G.arc[i][j].w=INT_MAX;
G.arc[i][j].m=;
}
for(k=;k<G.arcn;k++)
{
scanf("%d %d %d %d",&i,&j,&w,&m);
G.arc[i][j].w=G.arc[j][i].w=w;
G.arc[i][j].m=G.arc[j][i].m=m;
}
} struct{int w,m;}D[MVN]; //辅助数组{当前最短距离和,当前费用和}
void short_p(MG &G)
{
bool f[MVN]={false}; //是否锁定为最短路径
int i,j,k,min;
//初始化辅助数组并锁定起点
for(k=;k<G.vexn;k++)
{
D[k].w=G.arc[G.s][k].w;
D[k].m=G.arc[G.s][k].m;
}
f[G.s]=true;
//选择并锁定下一最短路径顶点
for(k=;k<G.vexn;k++)
{
min=INT_MAX;
for(j=;j<G.vexn;j++)
if(!f[j])
if(D[j].w<min)
{
i=j;
min=D[j].w;
}
f[i]=true;
//更新该顶点的邻接点的最短路
for(j=;j<G.vexn;j++)
if(!f[j]&&G.arc[i][j].w<INT_MAX)
if(min+G.arc[i][j].w<D[j].w)
{
D[j].w=min+G.arc[i][j].w;
D[j].m=D[i].m+G.arc[i][j].m;
}
else if(min+G.arc[i][j].w==D[j].w && D[i].m+G.arc[i][j].m<D[j].m) //距离相同时选择费用更少
D[j].m=D[i].m+G.arc[i][j].m;
}
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
MG G;
scanf("%d %d %d %d",&G.vexn,&G.arcn,&G.s,&G.e);
creat(G);
short_p(G);
printf("%d %d\n",D[G.e].w,D[G.e].m);
}
return ;
} /***************************************************
User name: ***
Result: Accepted
Take time: 0ms
Take Memory: 176KB
Submit time: 2016-11-17 18:23:42
****************************************************/
解法二(不推荐):深度优先搜索,注意搜索过程中的回退需要清除相关标记。
#include <iostream>
#include <cstdio>
#include <climits> using namespace std; #define MVN 550 typedef struct AdjMatrix
{
int w;
int m;
char *info;
}AM; typedef struct MGraph
{
int vex[MVN];
AM arc[MVN][MVN];
int vexnum,arcnum;
int s,d;
int w,m;
int minw,minm;
}MG; void creat(MG &G)
{
int i,j,w,m,k;
for(k=;k<G.vexnum;k++)
G.vex[k]=k;
for(k=;k<G.arcnum;k++)
{
scanf("%d %d %d %d",&i,&j,&w,&m);
G.arc[i][j].w=w;
G.arc[i][j].m=m;
G.arc[j][i].w=w;
G.arc[j][i].m=m;
}
} void DFS(MG &G,bool *visited,int i)
{
visited[i]=true;
if(i==G.d)
{
if(G.w<G.minw || G.w==G.minw && G.m<G.minm)
{
G.minw=G.w;
G.minm=G.m;
}
}
else
{
int k;
for(k=;k<G.vexnum;k++)
{
if(G.arc[i][k].w<INT_MAX&&visited[k]==false)
{
G.w+=G.arc[i][k].w;
G.m+=G.arc[i][k].m;
DFS(G,visited,k); visited[k]=false; //※探索不同路径后的回退操作※
G.w-=G.arc[i][k].w;
G.m-=G.arc[i][k].m;
}
}
}
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
MG G={};
scanf("%d %d %d %d",&G.vexnum,&G.arcnum,&G.s,&G.d);
int k,o;
for(k=;k<G.vexnum;k++)
{
for(o=;o<G.vexnum;o++)
G.arc[k][o].w=INT_MAX;
}//初始化邻接矩阵
creat(G);
bool visited[MVN]={false};
G.minm=INT_MAX; //初始化一个最大值
G.minw=INT_MAX;
DFS(G,visited,G.s);
printf("%d %d\n",G.minw,G.minm);
}
return ;
} /***************************************************
User name: ***
Result: Accepted
Take time: 0ms
Take Memory: 2832KB
Submit time: 2016-11-09 22:46:01
****************************************************/
SDUT 3363 数据结构实验之图论七:驴友计划的更多相关文章
- 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )
数据结构实验之图论七:驴友计划 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- SDUT OJ 数据结构实验之图论八:欧拉回路
数据结构实验之图论八:欧拉回路 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT 3364 数据结构实验之图论八:欧拉回路
数据结构实验之图论八:欧拉回路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 在哥尼斯堡的 ...
- SDUT 3346 数据结构实验之二叉树七:叶子问题
数据结构实验之二叉树七:叶子问题 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知一个按 ...
- SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...
- SDUT OJ 数据结构实验之图论六:村村通公路(最小生成树)
数据结构实验之图论六:村村通公路 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...
- SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...
- SDUT OJ 数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT OJ 数据结构实验之二叉树七:叶子问题
数据结构实验之二叉树七:叶子问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...
随机推荐
- UVALive - 3521 Joseph's Problem (整除分块)
给定$n,k$$(1\leqslant n,k\leqslant 10^9)$,计算$\sum\limits _{i=1}^nk\: mod\:i$ 通过观察易发现$k\%i=k-\left \lfl ...
- HDU4940 Destroy Transportation system(有上下界的最大流)
Problem Description Tom is a commander, his task is destroying his enemy’s transportation system. Le ...
- [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- 使用.NET中的XML注释(二) -- 创建帮助文档入门篇
一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...
- 在.net中读写config文件的各种方法(自定义config节点)
http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - ...
- 高性能服务器架构 的几个注意点 (High-Performance Server Architecture)
High-Performance Server Architecture 高性能服务器架构 来源:http://pl.atyp.us/content/tech/servers.html译文来源:htt ...
- BZOJ1370:[Baltic2003]团伙
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
- CF 949C Data Center Maintenance——思路+SCC
题目:http://codeforces.com/contest/949/problem/C 可以想到可能是每组c有连边的可能. 但别直接给c1.c2连边,那样之后会变得很不好做. 可以把一些限制放在 ...
- Visualforce入门第六篇_2017.3.1
Visualforce实现过滤.数据列表显示.分页功能 可以参考salesforce官网开发文档:https://trailhead.salesforce.com/modules/visualforc ...
- ELK多种架构及优劣
圈子里关于大数据.云计算相关文章和讨论是越来越多,愈演愈烈.行业内企业也争前恐后,群雄逐鹿.而在大数据时代的运维挑站问题也就日渐突出,任重而道远了.本文旨在针对复杂的大数据运维系统推荐一把利器,达到抛 ...