[Week1]BOJ_2644
カウント
この問題はコードでグラフィックを格納する2つの方法を実現した.また,どのような問題でBFSとDFSを使うかは少し混同している.BFSの最小移動回数または最短時間がキーワードとなる.
この問題では,世代を計算する際に最も親しい親や兄弟から始め,最短距離で見つけるためBFSを用いた.
隣接行列+BFS形式のコード
2人に全く親戚関係がなければ、世代を計算できない場合は-1に戻ります.
この問題はコードでグラフィックを格納する2つの方法を実現した.また,どのような問題でBFSとDFSを使うかは少し混同している.BFSの最小移動回数または最短時間がキーワードとなる.
この問題では,世代を計算する際に最も親しい親や兄弟から始め,最短距離で見つけるためBFSを用いた.
隣接行列+BFS形式のコード
boolean[] visited;
//boolean type으로 선언하지 않고 간선의 개수를 세기 위해서 int type으로 배열을 선언했다.
int[] dist = new int[n + 1];
start頂点からiまで必要な最小幹線数+12人に全く親戚関係がなければ、世代を計算できない場合は-1に戻ります.
package Graph;
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_2644 {
static int n, m;
static int target1, target2;
static int[] answer;
static int[][] adj;
static StringTokenizer st;
static BufferedReader br;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
target1 = Integer.parseInt(st.nextToken());
target2 = Integer.parseInt(st.nextToken());
m = Integer.parseInt(br.readLine());
adj = new int[n + 1][n + 1];
for (int i = 1; i <= m; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
adj[a][b] = adj[b][a] = 1;
}
answer = new int[n + 1];
BFS(target1);
System.out.println(answer[target2]);
}
private static void BFS(int start) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++) {
answer[i] = -1;
}
queue.add(start);
answer[start] = 0;
while (!queue.isEmpty()) {
int v = queue.poll();
for (int y = 1; y<= n; y++) {
if (adj[v][y] == 0) continue;
if (answer[y] != -1) continue;
queue.add(y);
answer[y] = answer[v] + 1;
}
}
}
}
隣接リスト+BFSコードpackage Graph;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_2644_list {
static int n, m, target1, target2;
static ArrayList<Integer>[] adj;
static int[] dist;
static StringTokenizer st;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
target1 = Integer.parseInt(st.nextToken());
target2 = Integer.parseInt(st.nextToken());
m = Integer.parseInt(br.readLine());
adj = new ArrayList[n + 1];
for (int i = 1; i <= n; i++) {
adj[i] = new ArrayList<>();
}
for (int i = 1; i <= m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
adj[a].add(b);
adj[b].add(a);
}
dist = new int[n + 1];
BFS(target1);
System.out.println(dist[target2]);
}
private static void BFS(int start) {
Queue<Integer> q = new LinkedList<>();
for (int i = 1; i <= n; i++) {
dist[i] = -1;
}
q.add(start);
dist[start] = 0;
while (!q.isEmpty()) {
int x = q.poll();
for(int y : adj[x]) {
if(dist[y] != -1) continue; //이미 탐색한 점이면 무시
q.add(y);
dist[y] = dist[x] + 1;
}
}
}
}
Reference
この問題について([Week1]BOJ_2644), 我々は、より多くの情報をここで見つけました https://velog.io/@dodamtanguri/Week1BOJ2644テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol