在这里需要注意的一点是: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;
}