PAT --- A1072 --- Figure

Pay attention to the extraction of input data, m can be taken to 10

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int INF=1000000000;
int g[1020][1020];
int vis[1020];
int dis[1020];
int n,m,k,ds;
void Dijkstra(int x){
	fill(vis,vis+1020,0);
	fill(dis,dis+1020,INF);
	dis[x]=0;
	for(int i=1;i<=n+m;i++){
		int u=-1;
		int MIN=INF;
		for(int j=1;j<=n+m;j++){
			if(vis[j]==0&&dis[j]<MIN){
				u=j;
				MIN=dis[j];
			}
		}
		//printf("u:%d\n",u);
		if(u==-1)return;
		vis[u]=1;
		for(int v=1;v<=n+m;v++){
			if(dis[u]+g[u][v]<dis[v]&&vis[v]==0&&g[u][v]!=INF){
				dis[v]=dis[u]+g[u][v];
			}
		}
	}
} 
int getid(string x){
	int ans=0;
	for(int i=0;i<x.length();i++){
		if(x[i]!='G'){
			ans=ans*10+x[i]-'0';
		}
	}
	if(x[0]=='G')return n+ans;
	else return ans;
}
int main(){
	fill(g[0],g[0]+1020*1020,INF);
	scanf("%d%d%d%d",&n,&m,&k,&ds);//房子的数目,candidate的数目,路的数目,辐射范围 
	string a,b;
	int c;
	for(int i=0;i<k;i++){
		cin>>a>>b>>c; 
		g[getid(a)][getid(b)]=c;
		g[getid(b)][getid(a)]=c;
	} 
	/*for(int i=1;i<n+m+1;i++){
		for(int j=1;j<n+m+1;j++){
			if(g[i][j]==INF){
				printf("- ");
			}else{
				printf("%d ",g[i][j]);
			}
		} 
		printf("\n");
	}*/
	
	int pos=-1,temp;
	double minmax=-1,avg,minAvg=INF;
	for(int i=n+1;i<=n+m;i++){
		avg=0;temp=INF;
		Dijkstra(i);
		/*for(int j=1;j<n+1;j++){
			printf("%d\n",dis[j]);
		}*/
		for(int j=1;j<=n;j++){
			avg=avg+dis[j];
			if(dis[j]>ds){//超出辐射范围 
				temp=INF;
				break;
			}else if(dis[j]<temp){
				temp=dis[j];//到某个站的最短距离 
			}
		}
		if(temp==INF)continue;
		//printf("%d,%d\n",temp,i);
		if(temp>minmax){
			minmax=temp;
			pos=i;
			minAvg=avg;
		}else if(temp==minmax&&avg<minAvg){
			pos=i;
			minAvg=avg;
		}
		//printf("%d,%lf\n\n",pos,avg/n);
	}
	
	if(pos==-1){
		printf("No Solution\n");
	}else{
		printf("G%d\n",pos-n);
		printf("%.1lf %.1lf\n",minmax,minAvg/n);
	}	
} 

Published 30 original articles · Like1 · Visits 397

Guess you like

Origin blog.csdn.net/weixin_46265246/article/details/105240267