プログラマdfs bfs単語変換
9917 ワード
質問リンク
2つの単語begin、target、単語の集合語があります.次のルールを使用して、beginからtargetに変換する最短変換プロセスを検索します.
一度に1つのアルファベットしか置き換えられません. 個の単語にしか変換できません.
たとえば、beginが「hit」、targetが「cog」、単語が「hot」、「dog」、「lot」、「log」、「cog」の場合、「hit」->「hot」->「dog」->「cog」の4つのステップで変換できます. 2つの単語begin、target、および単語の集約語をパラメータとして指定する場合は、少なくともいくつかのステップを経てbeginをtargetに変換するには、解法関数を記述します.
これは設計問題解決方式の論理に基づいて得られた問題である.しかし、それを実現する時、いくつかの小さな間違いがあって、私に多くの苦労をさせました.dfs方式で解読したのは,単語変換時に1文字しか変換できないため,変換と同時にターゲット文字を達成するために垂直方向に新しい状況の数を増やしたため,直感である.一般的なdfsのようにboolean[]visitを宣言し、すでにアクセスしたノードがアクセスされなくなったが、これは単純な接続ではなく、少数の場合に最小値のdfsを見つけるためにvisit[i]を再初期化した.
問題の説明
2つの単語begin、target、単語の集合語があります.次のルールを使用して、beginからtargetに変換する最短変換プロセスを検索します.
一度に1つのアルファベット
たとえば、beginが「hit」、targetが「cog」、単語が「hot」、「dog」、「lot」、「log」、「cog」の場合、「hit」->「hot」->「dog」->「cog」の4つのステップで変換できます.
に答える
これは設計問題解決方式の論理に基づいて得られた問題である.しかし、それを実現する時、いくつかの小さな間違いがあって、私に多くの苦労をさせました.dfs方式で解読したのは,単語変換時に1文字しか変換できないため,変換と同時にターゲット文字を達成するために垂直方向に新しい状況の数を増やしたため,直感である.一般的なdfsのようにboolean[]visitを宣言し、すでにアクセスしたノードがアクセスされなくなったが、これは単純な接続ではなく、少数の場合に最小値のdfsを見つけるためにvisit[i]を再初期化した.
コード#コード#
import java.util.*;
class Solution {
static boolean[] visit;
static int c;
public int solution(String begin, String target, String[] words) {
c = 50;
int len = words.length;
visit = new boolean[len];
dfs(begin, target, words, 0);
return c==50? 0: c;
}
static void dfs(String begin, String target, String[] words, int count){
if(begin.equals(target)) {
c= Math.min(c, count);
System.out.print(c);
}
for(int i=0;i<words.length;i++){
if(checkDiff(begin, words[i])&&!visit[i]){
visit[i]=true;
dfs(words[i],target, words, count+1);
visit[i]=false;
}
}
}
static boolean checkDiff(String first, String second){
int diff =0;
boolean check= false;
for(int i=0; i< first.length();i++){
if(first.charAt(i)==second.charAt(i)) {
diff++;
}
}
if(diff==first.length()-1) check =true;
return check;
}
}
Reference
この問題について(プログラマdfs bfs単語変換), 我々は、より多くの情報をここで見つけました https://velog.io/@kiki3700/프로그래머스-dfs-bfs-단어-변환テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol