Untitled
unknown
plain_text
2 years ago
1.5 kB
7
Indexable
#include<iostream> using namespace std; #define cons 202 int so_la; int la_x[cons]; int la_y[cons]; int ban_kinh[cons]; int check[cons]; int luu_buoc[cons]; int tim() { int index=0; int minmin = 9000000; for (int i = 0; i < so_la; i++) { if(check[i] == 0 && minmin > luu_buoc[i]) { minmin = luu_buoc[i]; index = i; } } return index; } int tinh(int a, int b) { int kq = (la_x[a] - la_x[b])*(la_x[a] - la_x[b]) + (la_y[a] - la_y[b])*(la_y[a] - la_y[b]); if(kq <= (40 + ban_kinh[a] + ban_kinh[b])*(40 + ban_kinh[a] + ban_kinh[b])) return 1; else if(kq > (90 + ban_kinh[a] + ban_kinh[b])*(90 + ban_kinh[a] + ban_kinh[b])) return 1000000; return 500; } int main() { //freopen("input.txt","r",stdin); int th;cin>>th; for (int tc = 1; tc <= th; tc++) { cin >> so_la; for (int i = 0; i < so_la; i++) { cin >> la_x[i] >> la_y[i] >> ban_kinh[i]; check[i] = 0; luu_buoc[i] = 1000000; } int vt_la = 0; check[vt_la] = 1; // la dau tien luu_buoc[vt_la] = 0; while (vt_la != so_la - 1) { for (int i = 1; i < so_la; i++) { int temp = tinh(vt_la,i); if(temp + luu_buoc[vt_la] < luu_buoc[i]) luu_buoc[i] = luu_buoc[vt_la] + temp; } vt_la = tim(); check[vt_la] = 1; } if(luu_buoc[vt_la] >= 1000000) cout << "-1" << endl; else cout << luu_buoc[vt_la] / 500 << " " << luu_buoc[vt_la] % 500 << endl; } return 0; }
Editor is loading...