1.2 图结构学习体会

       图的深度优先遍历类似于树的先序遍历采用的搜索方法的特点是尽可能先对纵深方向进行搜索;广度优先遍历尽可能先从指定的出发点,横向的访问图中的各个顶点;

floyd算法是最简单的最短路径算法,可以计算图中任意两点间的最短路径  folyd算法的时间复杂度是O(N3),如果是一个没有边权的图,把相连的两点  间的距离设为dist[i][j] = 1,不相连的两点设为无穷大,用 floyd算法可以判断i,j两点是否有路径相连。dijkstra算法用来计算从一个点到其他所有点的最短路径的算法,复杂度O(N2)。

      当编译程序遇到错误的时候,不要慌乱,要认真阅读程序,找出错误,当错误无法排除的时候,要查阅各种文献或者向老师和同学请教,对于我们的程序调试有很大的帮助。

2.PTA实验作业(4分)

2.1 题目1:7-4 公路村村通

2.2 设计思路(伪代码或流程图)

先用邻接矩阵的方法存储图,然后就运用Prim算法求出这个图的最小生成树,最后输出最少费用。

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。

 

题目2:7-5 畅通工程之最低成本建设问题

2.2 设计思路(伪代码或流程图)

 

用Prime算法求最小生成树

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。

 

题目3:7-8 城市间紧急救援

2.2 设计思路(伪代码或流程图)

求最短路径长度和点权和最大值的问题,同时要记录最短路径.

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

 

2.4 PTA提交列表说明。

 

3.截图本周题目集的PTA最后排名(3分)

 

4. 阅读代码(必做,1分)

  旅游规划:

  1. #include <iostream>  
  2. #include <algorithm>  
  3. #include <cstdio>  
  4. #include <queue>  
  5. #include <cstring>  
  6. using namespace std;  
  7. const int inf = 0x3f3f3f3f;  
  8. int map[550][550];  
  9. int vis[550];  
  10. int val[550][550];  
  11. int dis[550];  
  12. int sum[550];  
  13. int main() {  
  14.     int n, m, s, e;  
  15.     scanf("%d %d %d %d", &n, &m, &s, &e);  
  16.     int i, j, k = 0;  
  17.     for(i = 0; i < n; i++) {  
  18.         for(j = 0; j < n; j++) {  
  19.             if(i == j) map[i][j] = 0;  
  20.             else map[i][j] = inf;  
  21.         }  
  22.     }  
  23.     int x, y, z, q;  
  24.     for(i = 0; i < m; i++) {  
  25.         scanf("%d %d %d %d", &x, &y, &z, &q);  
  26.         map[x][y] = z;  
  27.         map[y][x] = z;  
  28.         val[x][y] = q;  
  29.         val[y][x] = q;  
  30.     }  
  31.     for(i = 0; i < n; i++) {  //初始化   
  32.         vis[i] = 0;  
  33.         dis[i] = inf;  
  34.         sum[i] = 0;  
  35.     }  
  36.     dis[s] = 0;  
  37.     int minn, v;  
  38.     for(i = 0; i < n; i++) {  
  39.         minn = inf;  
  40.         v = 0;  
  41.         for(j = 0; j < n; j++) {  
  42.             if(vis[j] == 0) {  
  43.                 if(minn > dis[j]) {  
  44.                     minn = dis[j];  
  45.                     v = j;  
  46.                 }  
  47.             }  
  48.         }  
  49.         vis[v] = 1;  
  50.         for(j = 0; j < n; j++) {  
  51.             if(vis[j] == 0) {  
  52.                 if(dis[j] > dis[v] + map[v][j]) {  
  53.                     dis[j] = dis[v] + map[v][j];  
  54.                     sum[j] = sum[v] + val[v][j];  
  55.                 }  
  56.                 else if(dis[j] == dis[v] + map[v][j]) {    //解题关键   
  57.                     sum[j] = min(sum[v] + val[v][j], sum[j]);  
  58.                 }  
  59.             }  
  60.         }  
  61.     }  
  62.     printf("%d %d\n", dis[e], sum[e]);  
  63.     return 0;  
  64. }  

posted on 2018-06-18 16:27  lbm1105  阅读(514)  评论(0编辑  收藏  举报

导航