算导3(BellmanFord)

3. Single-source shortest paths. The following is the adjacency matrix, vertex A is the source.

           E

         -1    3

                     2

          

             5

                    -3

    Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图 G=V,E),其源点为 s,加权函数 w是 边集 E 的映射。对图 G运行 Bellman-Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点 s可达的负权回路。若不存在这样的回路,算法将给出从源点 s到 图 G的任意顶点 v的最短路径 d[v]

Bellman-Ford算法流程分为三个阶段:

(1)    初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0;

(2)    迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)

(3)    检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在 d[v]中。


#include <cstdlib> 
#include <iostream>
#define N 5
#define MAX 9999 
using namespace std;

struct Edge
{
        int u, v, w;
};

Edge edge[MAX];
int d[N];
int vertex;

int BellmanFord()
{
      bool flag = 1;
      for(int i = 1; i < N; i++)
              for(int j = 0; j < vertex; j++)
              {
                  if(d[edge[j].v] > d[edge[j].u] + edge[j].w)
                  {
                          d[edge[j].v] = d[edge[j].u] + edge[j].w;
                  }
              }
      for(int j = 0; j < vertex; j++)
      {
              if(d[edge[j].v] > d[edge[j].u] + edge[j].w)
              {
                              flag = 0;
                              break;
              }
      }
      return flag;
}

void init()
{
      memset(d, MAX, sizeof(d));
      d[0] = 0;
      cin >> vertex;
      for(int i = 0; i < vertex; i++)
      {
              cin >> edge[i].u >> edge[i].v >> edge[i].w;
      }
}

void print()
{
      for(int i = 0; i < N; i++)
            cout << d[i] << " ";
      cout << endl; 
}

int main(int argc, char *argv[])
{
    init();
    if(BellmanFord())
        print();
    else 
          cout << "exist negative circle" << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}


算导3(BellmanFord)

BellmanFord:可以解决带负权的单源最短路径问题,能够检测回路中的负权环。也常用于查分约束系统问题的求解。时间复杂度为 O(VE)。

Practice 1 Date: Monday, March 18th, 2013 We highly encourage being environment friendly and trying all problems on your own. Implement exercise 2.3-7. Implement priority queue. Implement Quicksort and answer the following questions. (1) How many comparisons will Quicksort do on a list of n elements that all have the same value? (2) What are the maximum and minimum number of comparisons will Quicksort do on a list of n elements, give an instance for maximum and minimum case respectively. Give a divide and conquer algorithm for the following problem: you are given two sorted lists of size m and n, and are allowed unit time access to the ith element of each list. Give an O(lg m + lgn) time algorithm for computing the kth largest element in the union of the two lists. (For simplicity, you can assume that the elements of the two lists are distinct). Practice 2 Date: Monday, April 1st, 2013 We highly encourage being environment friendly and trying all problems on your own. Matrix-chain product. The following are some instances. Longest Common Subsequence (LCS). The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Longest Common Substring. The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Max Sum. The following is an instance. (-2,11,-4,13,-5,-2) Shortest path in multistage graphs. Find the shortest path from 0 to 15 for the following graph.   A multistage graph is a graph (1) G=(V,E) with V partitioned into K >= 2 disjoint subsets such that if (a,b) is in E, then a is in Vi , and b is in Vi+1 for some subsets in the partition; and (2) | V1 | = | VK | = 1.     Practice 3 Date: Monday, April 15th, 2013 We highly encourage being environment friendly and trying all problems on your own. Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem both as fractional knapsack and 0/1 knapsack. A simple scheduling problem. We are given jobs j1, j2… jn, all with known running times t1, t2… tn, respectively. We have a single processor. What is the best way to schedule these jobs in order to minimize the average completion time. Assume that it is a nonpreemptive scheduling: once a job is started, it must run to completion. The following is an instance. (j1, j2, j3, j4) : (15,8,3,10) Single-source shortest paths. The following is the adjacency matrix, vertex A is the source.  A B C D E A -1 3 B 3 2 2 C D 1 5 E -3 All-pairs shortest paths. The adjacency matrix is as same as that of problem 3.(Use Floyd or Johnson’s algorithm)     Practice 4 Date: Monday, May 8th, 2013 We highly encourage being environment friendly and trying all problems on your own. 0/1 Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem using back-tracking algorithm and try to draw the tree generated. Solve the 8-Queen problem using back-tracking algorithm.    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值