Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我竟然用宽搜写了一个,*^◎^*#include <iostream> #include <string> #include <queue> #include <cstring> #include <cstdlib> using namespace std; #define MAXN 102 #define MAX 0xffff int matrix[MAXN][MAXN], vertex; int dp[MAXN][MAXN]; int BFS(int startp,int endp) { int p=startp; queue<int>q; q.push(p); memset(dp,0,sizeof(dp)); while(!q.empty()) { p=q.front(); q.pop(); for(int i=1;i<=vertex;++i) //搜索每一个可能和p相邻的顶点 { if(i==p )continue; if(matrix[i][p]) //如果有边 { if(dp[startp][i]==0) //如果是第一次走过来 { dp[startp][i]=dp[startp][p]+matrix[p][i]; q.push(i); } else if(dp[startp][i]>dp[startp][p]+matrix[p][i]) //如果已经来过了,检查哪次路径短 { dp[startp][i]=dp[startp][p]+matrix[p][i]; q.push(i); //这时候应该更新状态,不要急着往下走,从i点再走一次,始终保持子路线最短 } } } } return dp[startp][endp]; } int main() { char s[100]; while(cin>>vertex) { for(int i=1;i<=vertex;++i) { for(int j=1;j<=i;++j) { if(i==j)matrix[i][j]=0; else { cin>>s; if(!strcmp(s,"x"))matrix[i][j]=matrix[j][i]=MAX; else matrix[j][i]=matrix[i][j]=atoi(s); } } } int ans=0; for(int i=2;i<=vertex;++i) { int t=BFS(1,i); if(ans<t)ans=t; } cout<<ans<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator