Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

bellman算法附代码!

Posted by chenxuan123456789 at 2012-10-29 20:33:11 on Problem 1502
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int size = 10010;
#define maxint 999999
int total;
struct Edge
{
       int u;
       int v;
       int weight;
};
class poj1502
{
      private:
              Edge edge[size];
              int dist[size];
      public:
             int nodenum;
             int edgenum;
             void addEdge(int,int,int);
             void input();
             void relax(int,int,int);
             void bellman();  
};
int translate(char str[])
{
    int sum=0,index,len;
    if(str[0]=='x')
    return -1;
    else
    {
        len=strlen(str);
        for(index=0;index<len;index++)
        sum=sum*10+(str[index]-'0');
    }
    return sum;    
}
void poj1502::addEdge(int u,int v,int weight)
{
     edge[total].u=u;
     edge[total].v=v;
     edge[total].weight=weight;
     total++;
}
void poj1502::input()
{
     edgenum=(nodenum-1)*(nodenum);
     char w[20];
     int weight,k=1;
     total=1;
     for(int i=2;i<=nodenum;i++)
     {
             for(int j=1;j<i;j++)
             {
                     scanf("%s",w);
                     weight=translate(w);
                     if(weight==-1)
                     {
                                   addEdge(i,j,maxint);
                                   addEdge(j,i,maxint);
                     }
                     else
                     {
                         addEdge(i,j,weight);
                         addEdge(j,i,weight);
                     }
             }
     }
}
void poj1502::relax(int s,int e,int w)
{
     if(dist[e]>dist[s]+w)
     dist[e]=dist[s]+w;
}
void poj1502::bellman()
{
     for(int k=1;k<=nodenum;k++)
     dist[k]=maxint;
     dist[1]=0;
     for(int i=1;i<nodenum;i++)
     {
             for(int j=1;j<=edgenum;j++)
             {
                     relax(edge[j].u,edge[j].v,edge[j].weight);
             }
     }
     int min=0;
     for(int k=2;k<=nodenum;k++)
     if(dist[k]>min)
     min=dist[k];
     cout<<min<<endl;
}
int main()
{
    poj1502 t;
    while(scanf("%d",&t.nodenum)!=EOF)
    {
                                      t.input();
                                      t.bellman();
    }                                 
    return 1;
}
                     
                                   
                     
                     

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator