POJ 1502 MPI Maelstrom最短路问题
2016-05-27 11:16
253 查看
题目大意:
有n个处理器,求一号处理器到所有处理器所需的时间总和。题目给出一个倒三角x表示两个处理器不能直接连通。数字表示传输时间。
题目思路:
先通过倒三角,求出图的邻接矩阵表示在裸dijkstra,程序如下:
有n个处理器,求一号处理器到所有处理器所需的时间总和。题目给出一个倒三角x表示两个处理器不能直接连通。数字表示传输时间。
题目思路:
先通过倒三角,求出图的邻接矩阵表示在裸dijkstra,程序如下:
# include<stdio.h> # include<stdlib.h> # include<string.h> int d[1010][1010],ans[1000000],t[10000]; char s[10000]; int main(){ int n,i,j,k,o,l,sum=0,m; char c; scanf("%d",&n); for(i=2;i<=n;i++) for(j=1;j<i;j++){ scanf("%s",&s);//用字符串读入每个数因为可能不是数字 if(s[0]=='x'){ d[i][j]=0;//s[0]=‘x’说明i,j不连接 d[j][i]=0; c=getchar(); continue; } m=0; l=strlen(s); for(k=0;k<l;k++){ m=m*10+s[k]-'0'; } d[i][j]=m; d[j][i]=m; //记得要将d[i][j]赋值为m c=getchar(); } for(i=1;i<=n;i++)ans[i]=1000000000;//dijkstra算法 ans[1]=0; for(i=1;i<=n;i++){ o=1000000000; for(j=1;j<=n;j++){ if(!t[j]&&ans[j]<o){ o=ans[j]; k=j; } } t[k]=1;//k为跳板 sum=ans[k]>sum?ans[k]:sum; for(j=1;j<=n;j++){ if(!t[j] && d[k][j] && ans[j]>ans[k]+d[k][j]){ ans[j]=ans[k]+d[k][j]; } } } printf("%d\n",sum); return 0; }
相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结