通过做这题,发现了自己的问题很大,做题不是贴代码,而是要了解思想;这题考的是有一个起点的集合,求起点集合到一个终点的最短距离,

本来想用Floy的但一看map[1000][1000]超时,有向图,逆序建邻接矩阵,这样就成了一个终点到所有点的最短路了。

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 1000001
int n,m,s,w;
int map[][];
int v[],dis[];
void DJ()
{
memset(v,,sizeof(v));
for(int i=;i<=n;i++)
dis[i]=N;
dis[s]=;
int min,k;
for(int i=;i<=n;i++)
{
min=N;
for(int j=;j<=n;j++)
{
if(v[j]==&&min>dis[j])
{
min=dis[j];
k=j;
}
}
if(min==N) break;
v[k]=;
for(int j=;j<=n;j++)
{
if(v[j]==&&map[k][j]+dis[k]<dis[j])
dis[j]=dis[k]+map[k][j];
} }
}
int main()
{
int x,y,z;
while(scanf("%d%d%d",&n,&m,&s)!=EOF)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
map[i][j]=N;
}
map[i][i]=;
}
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
if(map[y][x]>z)
{
map[y][x]=z;
}
}
DJ();
scanf("%d",&w);
int bb[];
for(int i=;i<w;i++)
{
scanf("%d",&bb[i]);
}
DJ(); int min=N;
for(int i=;i<w;i++)
if(dis[bb[i]]<min)
min=dis[bb[i]]; if(min==N)
printf("-1\n");
else
printf("%d\n",min);
}
return ;
}

Choose the best route(迪杰斯特拉)的更多相关文章

  1. HDU 2680 最短路 迪杰斯特拉算法 添加超级源点

    Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  2. POJ 2502 Subway(迪杰斯特拉)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6692   Accepted: 2177 Descriptio ...

  3. PAT 1087 All Roads Lead to Rome[图论][迪杰斯特拉+dfs]

    1087 All Roads Lead to Rome (30)(30 分) Indeed there are many different tourist routes from our city ...

  4. hdu 1142(迪杰斯特拉+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  5. c语言实现迪杰斯特拉算法(邻接表)

    储存结构,结构体的定义:(权值w用于表示两点间路径的花费) typedef int Status; typedef struct ENode//图的邻接表定义 { int adjVex;//任意顶点u ...

  6. hdu 1595 find the longest of the shortest(迪杰斯特拉,减去一条边,求最大最短路)

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  7. Bumped!【迪杰斯特拉消边、堆优化】

    Bumped! 题目链接(点击) Peter returned from the recently held ACM ICPC World Finals only to find that his r ...

  8. 最短路径算法-迪杰斯特拉(Dijkstra)算法在c#中的实现和生产应用

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思想),直到扩展到终点为止 贪心算法(Greedy ...

  9. C#迪杰斯特拉算法

    C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...

随机推荐

  1. Android 之 布局训练

      1.线性布局 LinearLayout <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  2. 百度前端学院js课堂作业合集+分析(更新中...)

    第一课:简陋的登录框 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. C语言工具:LCC-Win32+v3.0

    LCC-Win32+v3.0(带汉化).rar  小巧精悍的工具 安装步骤: 1.先安装 LCC-Win32V3.0.exe 假如安装目录为:C:\lcc 2.再安装 LCC-Win32V3.0汉化补 ...

  4. ubuntu14.04 LTS Shutter配置快捷键

    一 shutter设置后的截图 二 shutter配置快捷键 可通过 $shutter --help 查看命令 点击 “应用”按钮,然后:

  5. MyBatis学习之多表查询

    一对多需求:即一张表class中又含有多张表(teacher,student)内容.现根据class_id 来获取对应的班级信息(包括学生和老师信息) 方式一:嵌套结果 使用嵌套结果映射来处理重复的联 ...

  6. apache两种工作模式详解

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  7. 2555: SubString[LCT+SAM]

    2555: SubString Time Limit: 30 Sec  Memory Limit: 512 MB Submit: 2601  Solved: 780 [Submit][Status][ ...

  8. select默认下拉箭头改变、option样式清除

    谷歌.火狐.ie下 select 的默认下拉箭头图标差别还是比较大,一般我们都会清除默认样式,重新设计箭头图标: /* --ie清除--*/ select::-ms-expand{ display: ...

  9. Sublime text3配置LiveReload 浏览器即时刷新

    1.在sublime控件台 install livereload插件(缺点:每次重新打开Sublime都需要启动) 2.配置Preference > Package Settings > ...

  10. httpWebRequest获取流和WebClient的文件抓取

    httpWebRequest获取流和WebClient的文件抓取 昨天写一个抓取,遇到了一个坑,就是在获取网络流的时候,人为的使用了stream.Length来获取流的长度,获取的时候会抛出错误,查了 ...