⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 FTp服务器的功能实现
💻 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 + -