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 ...
随机推荐
- ProjectEuler654
我,ycl:BM是什么早就忘了! 毕老爷:那你们可以做一做这道题练练BM板子啊. 传送门 //Achen #include<bits/stdc++.h> #define For(i,a,b ...
- set/multiset容器
一.二叉树基本概念 二叉树就是任何节点最多只允许有两个子节点.分别是左子节点和右子节点. 二叉搜索树,是指二叉树中的节点按照一定的规则进行排序,使得对二叉树中元素访问更加高效.二叉搜索树的放置规则是: ...
- C++对C语言的拓展(5)—— 函数重载和函数指针结合
1.函数指针的介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关.举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为in ...
- js中的点击事件(click)的实现方式
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- PLSQL Developer 攻略
.Net程序员学用Oracle系列(18):PLSQL Developer 攻略 1.功能说明及使用技巧 1.1.对象浏览器 1.2.SQL 窗口 1.3.测试窗口 1.4.命令窗口 1.5.图表 ...
- 机器学习:数据归一化(Scaler)
数据归一化(Feature Scaling) 一.为什么要进行数据归一化 原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的: 问题:特征数字化后,由于取值大小不同,造成特征空间中样本 ...
- myelipse中部署路径deploy location出现错误
背景: 因java_web项目中的所有代码以及资源文件突然无法提交,在尝试过诸多方法无果后,果断删除项目重新将down下来.启动Tomcat无问题,使用原来的访问连接报错.经检查发现加载至Tomcat ...
- SQL基础(1)
1.SQL简介 (1)什么是SQL? SQL指结构化查询语言 SQL使我们有能力访问数据库 SQL是一种 ANSI 的标准计算机语言 (2)SQL 能做什么? SQL面向数据库执行查询 SQL可从数据 ...
- Spring MVC配置详解(2)---bai
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...
- 类型:Java;问题:eclipse配置maven;结果:eclipse配置maven
eclipse配置maven 下面跟大家分享的是eclipse配置maven的方法. 方法/步骤 安装maven之前,要先安装jdk及配置JAVA_HOME环境变量.JDK1.4以上. 下载maven ...