안녕하세요 질문입니다.
155
작성한 질문수 34
안녕하세요 예전부터 강의 잘 보고 있습니다. 다름이 아니라 제가 자바만 쓰는 곳에 코테를 준비하게 되서 자바로 문제푸는 중인데
선생님께서 강의해주신 C++을 전부 제 나름대로 자바로 바꾸는 중입니다. 근데 저 벡터 부분을 자바로 바꾸는 부분에서 막혔는데 혹시 자바에서는 선생님 코드 어떻게 써야할지 혹시 알려주시면 감사하겠습니다.(전에 자바 질문도 받아주신다는 글 봐서 질문 드립니다..) 저 벡터 로 선언한 map 부분의 map[a].push_back[b]를 자바에서 쓰려니까 구글링 해도 잘 모르겠어서 질문 드립니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
using namespace std;
int ch[30], cnt=0, n, path[30];
vector<int> map[30];
void DFS(int v, int L){
int i, j;
if(v==n){
cnt++;
for(j=0; j<L; j++){
printf("%d ", path[j]);
}
puts("");
}
else{
for(i=0; i<map[v].size(); i++){
if(ch[map[v][i]]==0){
ch[map[v][i]]=1;
path[L]=map[v][i];
DFS(map[v][i], L+1);
ch[map[v][i]]=0;
}
}
}
}
int main(){
//freopen("input.txt", "rt", stdin);
int m, i, j, a, b, c;
scanf("%d %d", &n, &m);
for(i=1; i<=m; i++){
scanf("%d %d", &a, &b);
map[a].push_back(b);
}
ch[1]=1;
path[0]=1;
DFS(1, 1);
printf("%d\n", cnt);
return 0;
}
package inflearn;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.Vector;
public class _66_경로탐색_인접리스트 {{
static int []ch= new int[30];
static int cnt = 0, n;
static int []path= new int[30];
//vector<int> map[30];
static Vector<Integer> map = new Vector<Integer>(30);
static void DFS(int v, int L){
int i, j;
if(v==n){
cnt++;
for(j=0; j<L; j++){
System.out.printf("%d ", path[j]);
}
System.out.println("");
}
else{
for(i=0; i<map[v].size(); i++){
if(ch[map[v][i]]==0){
ch[map[v][i]]=1;
path[L]=map[v][i];
DFS(map[v][i], L+1);
ch[map[v][i]]=0;
}
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
Scanner sc= new Scanner(System.in);
st = new StringTokenizer(br.readLine()," ");
int n,m, i, j, a, b, c;
// scanf("%d %d", &n, &m);
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine()," ");
for(i=1; i<=m; i++){
// scanf("%d %d", &a, &b);
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
map[a].push_back(b);
}
ch[1]=1;
path[0]=1;
DFS(1, 1);
System.out.printf("%d\n", cnt);
}
}
답변 1
1
안녕하세요^^
저는 인접리스트를 ArrayList로 구현합니다.
경로탐색을 인접리스트로 짜본것입니다.
import java.util.*;
class Main {
static int n, m, answer=0;
static ArrayList<ArrayList<Integer>> graph;
static int[] ch;
public void DFS(int v){
if(v==n) answer++;
else{
for(int nv : graph.get(v)){
if(ch[nv]==0){
ch[nv]=1;
DFS(nv);
ch[nv]=0;
}
}
}
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
n=kb.nextInt();
m=kb.nextInt();
graph = new ArrayList<ArrayList<Integer>>();
for(int i=0; i<=n; i++){
graph.add(new ArrayList<Integer>());
}
ch=new int[n+1];
for(int i=0; i<m; i++){
int a=kb.nextInt();
int b=kb.nextInt();
graph.get(a).add(b);
}
ch[1]=1;
T.DFS(1);
System.out.println(answer);
}
}
0
자바 강의 만들기 시작한지 1주일 정도 되었습니다. 2주 정도 더 찍어서 초반부가 완성되면 일단 오픈하고 연재식으로 할까 합니다. 그리고 할인기간 한달 안에 완성하는게 목표입니다.
테스트 케이스 질문
0
368
1
병합정렬 시간복잡도 질문
0
459
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1340
2
질문드립니다.
0
372
1
질문드립니다!
0
425
1
dev 프로그램 질문
0
271
1
문제가 이해가 안되요
0
371
1
4번 나이차이 문제 접근법 질문 드립니다.
0
302
1
source file not compiled
0
1030
3
59번 질문드립니다.
0
367
1
25번 문제 질문
0
343
1
4. 나이차이 문제 질문입니다.
0
364
1
90번 라이언 킹 심바 1번 테스트 케이스
0
465
1
71번 문제 전역 변수 질문 있습니다
0
355
1
75번, 79번 priority_queue관련
1
351
1
75.최대 수입 스케줄
0
392
2
복면산 정답의 수
0
424
1
테스트 케이스에 대해서
0
439
1
수업 내용 질문입니다!
1
227
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
814
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
248
1
다른 풀이 방식
0
312
1
크루스칼 vs 프림
0
301
1
숫자 총개수 small 질문있습니다.
0
232
1





