最基本的最短路径问题,求出到各个点的最短路,然后输出Len数组中的最大值即可,我用的SPFA #include<iostream> #include<vector> #include<queue> #include<cstring> #include<cstdio> #include<string> #include<sstream> #include<algorithm> #define getint(var) scanf("%d",&var) using namespace std; template<class ConvertTo,class ConvertFrom> inline ConvertTo Convert(ConvertFrom src) { std::stringstream ss; ConvertTo ct; ss<<src; ss>>ct; return ct; } struct GNode { GNode(){} GNode(int num,int len):len(len),num(num){} int len,num; }; const int MAX=110; int INF=100000; int Len[MAX]; void SPFA(const vector<vector<GNode> >& Graph,int Source) { queue<int> Q; Q.push(Source); fill(Len,Len+Graph.size(),INF); Len[Source]=0; while(!Q.empty()) { int u=Q.front();Q.pop(); for(unsigned i=0;i!=Graph[u].size();i++) if(Len[u]+Graph[u][i].len<Len[Graph[u][i].num]) { Len[Graph[u][i].num]=Len[u]+Graph[u][i].len; Q.push(Graph[u][i].num); } } } int main() { int n; string str; getint(n); vector<vector<GNode> > Graph(n); for(int i=1;i!=n;i++) for(int j=0;j!=i;j++) { cin>>str; if(str[0]!='x'){ Graph[i].push_back(GNode(j,Convert<int>(str))); Graph[j].push_back(GNode(i,Convert<int>(str)));} } SPFA(Graph,0); cout<<*max_element(Len,Len+n)<<endl; }