Untitled
unknown
plain_text
a year ago
1.5 kB
8
Indexable
#include<iostream> using namespace std; int t,n,x,y,r; int toado[201][3]; int mang[201][201]; int key[201],parent[201],visited[201]; int dis(int i, int j){ int sum; sum=(toado[i][0]-toado[j][0])*(toado[i][0]-toado[j][0])+(toado[i][1]-toado[j][1])*(toado[i][1]-toado[j][1]); if(sum<(40+toado[i][2]+toado[j][2])*(40+toado[i][2]+toado[j][2])) return 1; else if((sum>(40+toado[i][2]+toado[j][2])*(40+toado[i][2]+toado[j][2])) && (sum<=(90+toado[i][2]+toado[j][2])*(90+toado[i][2]+toado[j][2])) ) return 200; else return 2000000; } int minKey(){ int min=1000000; int index=0; for(int i=1; i<=n; i++){ if(key[i]<min && visited[i]==0){ min=key[i]; index=i; } } return index; } void dijkstra(int start){ for(int i=1; i<=n; i++){ key[i]=1000000; parent[i]=-1; visited[i]=0; } key[start]=0; for(int i=1; i<=n; i++){ int u = minKey(); visited[u]=1; for(int j=1; j<=n; j++){ if( visited[j]==0){ if(mang[u][j]+key[u]<key[j]){ key[j]=mang[u][j]+key[u]; parent[j]=u; } } } } } int main(){ freopen("input.txt","r",stdin); cin >> t; for(int tc=1;tc<=t;tc++){ cin >> n; for(int i=1;i<=n;i++) { cin >> x >> y >> r; toado[i][0]=x; toado[i][1]=y; toado[i][2]=r; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) mang[i][j]=dis(i,j); } dijkstra(1); if(visited[n]==0) cout << "-1" << endl; else{ int l=key[n]/200; int s=key[n]%200; cout << l << " " << s << endl; } } return 0; }
Editor is loading...
Leave a Comment