プログラマGPS
2844 ワード
コード#コード#
#include <vector>
#include <algorithm>
#include <iostream>
#define INF 1e9
using namespace std;
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, int m, vector<vector<int>> edge_list, int k, vector<int> gps_log) {
int answer = 0;
vector<int> graph[201];
for (auto i : edge_list) {
graph[i[0]].push_back(i[1]);
graph[i[1]].push_back(i[0]);
}
for(int i=1;i<=n;i++) graph[i].push_back(i);
vector<vector<int>> dp(k, vector<int>(n + 1, INF));
dp[0][gps_log[0]] = 0;
for (int i = 0; i < k - 1; i++) {
for (int j = 1; j <= n; j++) {
if (dp[i][j] == INF) continue;
for (int k : graph[j]) {
int re = dp[i][j];
if (gps_log[i + 1] != k) re++;
dp[i + 1][k] = min(dp[i + 1][k], re);
}
}
}
answer = dp[k - 1][gps_log[k - 1]];
if(answer==INF) return -1;
return answer;
}
に答える
まず隣接リストでグラフィックを実現した.
vector<int> graph[201];
for (auto i : edge_list) {
graph[i[0]].push_back(i[1]);
graph[i[1]].push_back(i[0]);
}
for(int i=1;i<=n;i++) graph[i].push_back(i);
問題では、ノードがその位置にとどまる可能性があるため、リストに独自のノードを含める必要があります.dpテーブルを作成し、無限にdpを初期化し、dpはエラーリカバリを格納し、初期点を0に初期化します.
現在の値がINFの場合はdpテーブルを返してリフレッシュし、現在の値がINFでない場合は無限のノードに渡し、現在のgps logの現在時間と同じであればエラー値を追加せずに直接インポートし、異なる場合は+1で埋め込むことができます.
Reference
この問題について(プログラマGPS), 我々は、より多くの情報をここで見つけました https://velog.io/@josajang98/GPSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol