📄 test.cpp
字号:
#include <iostream>
#include <string>
#define max (1000000);
using namespace std;
int main(void){
int maxValue = (int)max;
int n,roads,s,d; //d为目标结点
int min,signal;
string result="";
int premin = -1; // pre min value
int nextMin ,currMin; //set max Value
int cases;
cin>>cases;
for(int i1=0; i1<cases; i1++){
cin>>n>>roads;
premin = -1;
int value[n+1][n+1];
int path[n+1];
for(int i2=0;i2<=n;i2++){
path[i2] = 0;
}
for(int i3=0; i3<=n;i3++){
for(int j1=0;j1<=n;j1++)
{
value[i3][j1]=maxValue;
}
}
int n1,n2,v;
for(int i4=0; i4<roads; i4++){
cin>>n1>>n2>>v;
value[n1][n2] = v;
}
//输入源结点和目标结点
cin>>s>>d;
for(int i5=0; i5<=n;i5++){
int t = maxValue;
if(value[s][i5]<t){
path[i5]=1;
}
}
if(s!=1)
{
min = value[s][1] +1;
currMin = 0;
signal =1;
}
else
{
min = value[s][2]+1;
currMin = 1;
signal =1;
}
do
{
if(signal == 0) // nothing node to find
{
premin = min-1;
nextMin = maxValue ;//set max Value
for(int t=1;t<=n;t++)
{
if(value[s][t]>premin&&value[s][t]<nextMin)
{
nextMin=value[s][t];
}
}
min = nextMin +1;
currMin = 0;
}
signal =0;
for(int i6 = currMin+1;i6<=n;i6++)
{
if(value[s][i6]<min && value[s][i6]>premin)
{
currMin =i6;
min = value[s][i6];
signal = 1;
}
}
if(signal == 1)
{
int j2;
for(j2 =1;j2<=n;j2++)
{
if(value[currMin][j2]!=maxValue &&( j2!=currMin)&&(value[s][currMin]+value[currMin][j2]<=value[s][j2]))
{
value[s][j2] = value[s][currMin]+value[currMin][j2];
if(value[s][currMin]+value[currMin][j2]<value[s][j2])
{
path[j2]= path[currMin];
}
else
{
path[j2]= path[j2]+path[currMin];
}
//int tt = path[j2];
}
}
min = min +1;
}
//min++;
}
while(currMin!=d);
if(value[s][d]==maxValue)
{
value[s][d] = 0;
}
char temp[20] = {0};
sprintf(temp,"%d",value[s][d]);
//result += value[s][d];
result += temp;
result += "\n";
char temp1[10] = {0};
sprintf(temp1,"%d",path[d]);
//result += path[d];
result += temp1;
if(i1 == cases-1)
{
result +="\n";
}
else
{
result += "\n\n";
}
//cout<<value[s][d]<<endl;
//cout<<path[d]<<endl;
}
cout<<result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -