POJ1502(floyd算法求最短路+string到int的转换)

在这里需要注意的一点是:C++如何将string数据转化成为int型数据?

网上有很多方法,在这里我使用并且值得借鉴的一种方法是:

1.在开头引入头文件:<sstream>

2.声明string对象s,在使用时声明stringstream对象ss,以便初始化ss

再进行如下两个语句:

(1)ss<<s;

(2)ss>>(int型变量);

语句(1)的作用是向ss中插入字符串s(是一个数字形式的字符串),语句(2)的作用是将ss存进int型变量中(string到int的转化完成) 

还用另一种方法是值得借鉴的:atoi函数:可以将char数组型的数据转化为int型数据,使用形式是:

char s[10];[  给s数组赋值 ];int a=atoi(s); 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=105;
int dis[maxn][maxn];
int n,minx;
string s;
stringstream ss;
void init()
{
    memset(dis,inf,sizeof(dis));
    for(int i=1; i<=n; i++)
        dis[i][i]=0;
    minx=-1;
}
void floyd()
{
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    for(int i=1; i<=n; i++)
        minx=max(minx,dis[1][i]);
}
int main()
{
    scanf("%d",&n);
    init();
    for(int i=2; i<=n; i++)
        for(int j=1; j<=i-1; j++)
        {
            cin>>s;
            if(s=="x");
            else
            {
                stringstream ss;
                ss<<s;
                ss>>dis[i][j];
                dis[j][i]=dis[i][j];
            }
        }
    floyd();
    printf("%d\n",minx);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41658955/article/details/81542578