close

思路:

這題沒有演算法,不是圖論,別被騙了,從酋長起點開始走,看酋長那點到其他人的最短距離是誰,選擇那點。

再來加入那點,更新酋長那點到其他人的最短距離。記得走過的點要標記走過,避免重複走到同樣的點。依序印出走到的點即為答案。 不過一直AC不了,不知有沒有大神願意幫我看看QAQ。看不出來觀念錯在哪...。不過ITSA本身平台judge就很怪,之前就很雷,judge輸入輸出一堆問題,現在解不出來怪judge就對了啦。

#更: 這題同 [C_GD05-易] 征服部落 ,所以我解法是正確的

ERR代碼:

#include <iostream>
#include <cstring>
#define MX 10000
using namespace std;
int dis[1000][1000], min_dis[1000];
bool vis[1000];
int main()
{
    int t, n, k;

    cin >> t;
    while(t--){
        memset(vis, 0, sizeof vis);
        cin >> n >> k;
        for(int i = 0; i < n; ++i)
            for(int j = 0; j < n; ++j)
                cin >> dis[i][j];
        for(int i = 0; i < n; ++i)
            min_dis[i] = MX;
        for(int i = 0; i < n; ++i){
            if(i != 0)
                cout << " ";
            cout << k;
            vis[k] = true;
            int mn = MX, pos = k;
            for(int j = 0; j < n; ++j){
                min_dis[j] = min(min_dis[j], dis[k][j]);
                if(!vis[j] && mn > min_dis[j]){
                    mn = min_dis[j];
                    pos = j;
                }
            }
            k = pos;
        }
        cout << "\n";
    }
    return 0;
}
/*
2
6 0
0 10 10000 30 45 10000
10 0 50 10000 40 25
10000 50 0 10000 35 15
30 10000 10000 0 10000 20
45 40 35 10000 0 55
10000 25 15 20 55 0
6 0
0 10 10000 30 45 10000
10 0 5 10000 14 25
10000 5 0 10000 35 15
30 10000 10000 0 10000 2
45 14 35 10000 0 55
10000 25 15 2 55 0
*/

arrow
arrow

    尾玉 發表在 痞客邦 留言(0) 人氣()