本文主要是介绍玛雅人的密码(BFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
宽度优先搜索,这道题还需要再好好吃透。
package 机试;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;public class D3_23_4 {public static class Data {String str;int time;public Data(String str, int time) {this.str = str;this.time = time;}}public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedReader br=new BufferedReader(new InputStreamReader(System.in));String line;while((line=br.readLine())!=null){int n=Integer.valueOf(line);String str=br.readLine();System.out.println(BFS(n,str));}br.close();}private static int BFS(int n, String str) {// TODO Auto-generated method stubLinkedList <Data> list=new LinkedList<>();HashSet<String> set = new HashSet<>();if(isContain(str)){return 0;}else{list.add(new Data(str,0));set.add(str);}Data cur;String next;int times;while(!list.isEmpty()){cur=list.poll();times=cur.time;for(int i=0;i<n-1;i++){if (cur.str.charAt(i) != cur.str.charAt(i + 1)) {next = swapString(i, cur.str);if (isContain(next)) {return times + 1;}if(!set.contains(next)){set.add(next);list.add(new Data(next,times+1));}}}}return -1;}private static String swapString(int i, String str) {// TODO Auto-generated method stubchar[] chs = str.toCharArray();char c = chs[i];chs[i] = chs[i + 1];chs[i + 1] = c;return new String(chs);}private static boolean isContain(String str) {// TODO Auto-generated method stubchar[] chs = str.toCharArray();for (int i = 0; i + 3 < str.length(); i++) {if (chs[i] == '2' && chs[i + 1] == '0' && chs[i + 2] == '1' && chs[i + 3] == '2') {return true;}}return false;}}
这篇关于玛雅人的密码(BFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!