『壹』 java高手們可否提供一個廣度優先搜索的樣例,並簡要解釋一下該演算法……
void bfs(TreeNode t){
Queue q = new LinkedList<TreeNode>();
q.enqueue(t);
while(!q.isEmpty && q.peek().element != null){
TreeNode temp = q.dequeue();
System.out.println(temp.element);
q.enqueue(temp.leftchild);
q.enqueue(temp.rightchild);
}
}
class TreeNode <AnyType>{
AnyType element;
TreeNode rightchild;
TreeNode leftchild;
}
『貳』 ACM學bfs dfs需要有什麼基礎,C++嗎,還是Java
bfs的話,要用到隊列的思想的。
不過隊列的思想講起來,也很簡單已接受,自己網上找一下就好了。
至於其他的除了queue以外的東西,比如你寫的algorithm庫函數的,跟bfs無關,可以不做了解。
至於dfs,只要懂遞歸就可以了。
建議先學dfs,再學bfs。
『叄』 BFS求源代碼及思路
1、演算法用途:
是一種圖像搜索演演算法。用於遍歷圖中的節點,有些類似於樹的深度優先遍歷。這里唯一的問題是,與樹不同,圖形可能包含循環,因此我們可能會再次來到同一節點。
2、主要思想:
主要藉助一個隊列、一個布爾類型數組、鄰接矩陣完成(判斷一個點是否查看過,用於避免重復到達同一個點,造成死循環等),先將各點以及各點的關系存入鄰接矩陣。
再從第一個點開始,將一個點存入隊列,然後在鄰接表中找到他的相鄰點,存入隊列,每次pop出隊列頭部並將其列印出來(文字有些抽象,實際過程很簡單),整個過程有點像往水中投入石子水花散開。
4、復雜度分析:
演算法藉助了一個鄰接表和隊列,故它的空問復雜度為O(V)。 遍歷圖的過程實質上是對每個頂點查找其鄰接點的過程,其耗費的時間取決於所採用結構。 鄰接表表示時,查找所有頂點的鄰接點所需時間為O(E),訪問頂點的鄰接點所花時間為O(V),此時,總的時間復雜度為O(V+E)。
『肆』 JAVA求10個景點間各個景點的最短路徑 圖隨便話 距離隨便 求代碼
最有效,切不復雜的方法使用Breadth First Search (BFS). 基本代碼如下(偽代碼)。因為BFS不用遞歸,所以可能會有點難理解。
public Stack findPath(Vertex 起始景點, Vertex 目標景點){
Queue <Vertex> q = new Queue<Vertex>();
s.enqueue(起始景點);
Vertex 當前位置;
while(!s.isEmpty()){
當前位置 = s.dequeue();
if (當前位置 == 目標景點) break;
for (每一個相鄰於 當前位置 的景點 Vertex v){
if (!v.visited){
v.parent = 當前位置;
// 不是規定,不過可以節省一點時間
if (v == 目標景點){
current = v;
break;
}
s.enqueue(Vertex v);
v.visited = true;
}
}
}
Stack <Vertex> solution = new Stack <Vertex>();
Vertex parent = current;
while (parent != 起始景點){
solution.push(parent);
parent = current.parent;
}
for (graph中的每一個vertex) vertex.visited = false;
return solution(); // 其實這里建議用一個 Path 的inner class 來裝所獲得的路線
}
然後再 main 求每兩個景點之間的距離即可
public static void main(String[] argv){
PathFinder pf = new PathFinder();
Stack[][] 路徑 = new Stack[10][10];
for(int i=0; i<pf.vertices.length; i++){
for(int j=i+1; j<pf.vertices.length; j++){
Stack s = pf.findPath(pf.vertices[i], pf.vertices[j]);
路徑[i][j] = s; 路徑[j][i] = s; // 假設你的graph是一個undirected graph
}
}
// 這么一來就大功告成了!對於每兩個景點n 與 m之間的最短路徑就是在 stack[n][m] 中
}
還有一種方法就是用Depth First Search遞歸式的尋找路徑,不過這樣比較慢,而且我的代碼可能會造成stack overflow
public Stack dfs(Vertex 當前景點,Vertex 目標景點){
if(當前景點 == 目標景點) return;
Stack solution = new Stack();
Stack temp;
for (相鄰於 點錢景點 的每一個 Vertex v){
if (!v.visited){
v.visited = true;
temp = dfs(v, 目標景點);
// 抱歉,不記得是stack.size()還是stack.length()
if (solution.size() == 0) solution = temp;
else if(temp.size() < solution.size()) solution = temp;
v.visited = false; 復原
}
}
return solution;
}
然後再在上述的Main中叫dfs...
參考:
http://www.cs.berkeley.e/~jrs/61b/lec/29
http://www.cs.berkeley.e/~jrs/61b/lec/28
『伍』 Java如何讓一個形狀動起來,就比如貪吃蛇
你知道動畫是如何動起來的么?沒錯,就是一張一張的畫,快速地閃過,當速度足夠快的時候,就好像這個圖形動起來了..
同理,在用java做可移動圖形的時候,比如我們用awt繪圖,當我們一遍一遍擦除重繪,速度到一定程度的時候, 這個圖形就好像動了起來..
2018年8月28日15:55:01
『陸』 Java 編寫 貪吃蛇游戲的 大體思路是什麼
要代碼和jar包我這有,思路我就大概講一下:首先是要在畫布上畫上一個塊,這就是蛇頭,但是蛇是會變長的,所以需要用一個東西來存蛇,那就可以用數組、ArrayList、LinkedList、等等(我比較喜歡用LinkedList),這里雖然說的是蛇,其實是一個塊的x、y坐標,蛇是畫好了,但蛇是會動的,這就要用一個線程和一個move()方法了,讓它不停的動,蛇是動了,但是沒有方向,這時需要一個方法讓它有方向,但要注意的是相反的方向不能改變方向(也就是按了上,按下就不能用了),蛇有方向又能動,但到邊上了就不行了,這時就要讓它出界結束游戲,接下來就是要出現食物了,食物這個好辦,用一個隨機數搞定它,注意食物不能在界外,食物有了,蛇就要去吃它了,這時就要用一個方法去吃食物了,吃到了讓蛇長一個塊,食物重新出現,蛇是長大了,但是它可以碰到自己的身體,那麼你就要做了方法讓它碰到後結束游戲,就這樣最初步的思路搞定了。接下來的就是一些細節了,這就不說了。
『柒』 用Java來寫有道詞典,需要哪些知識
1.首先,你要確定你要開發什麼樣的軟體,是PC端的,還是移動端的。
2.如果是PC端的,那麼你要確定是Windows的,還是Mac OS的,或者是Linux的。前兩者可能性最大。windows 的去學C#和Qt還有MFC,你現在掌握的C和C++肯定是不夠的。Mac OS 去學Objective-C和Cocoa庫/框架。
3.如果是移動端,你最容易的還是區別一下Android和IOS的。Android去學Java和Android對應的知識,比如去看第一行代碼,對Android 有一個初步認識。IOS的話剛開始對C要求不高,你就先去學Objective-C。
4.可以查詞的話你還的去學學演算法,例如倒排索引,bfs,dfs等,剛開始可以直接上框架(可以了解一下solr和lucene),然後還得有詞庫。
『捌』 數據結構圖標問題寫一個DFS 和 BFS的java程序 提前謝謝大神了 具體在詳情下面有圖片
好。2000韓元一個烤紅薯。
『玖』 分別用DFS和BFS演算法給電腦設置AI(JAVA)
有必勝策略的吧。。狀態空間的上限是3^9也就是不到20000實際上沒有這么多。所以直接採用BFS標記會比較好。演算法的話就是填充表,把表(九個格子)填為必勝、必敗,己勝,開始的時候全部標為必敗,再從勝狀態開始向回BFS(或者DFS也可以),己勝狀態向回標的一定是敗狀態,必勝狀態的上一狀態為必敗態,必敗態的上一狀態可能是必敗或者必勝(這就是因為這傢伙走錯棋了所以要輸!)
我的習慣。不寫代碼。沒有意思。
『拾』 Java推箱子怎麼寫啊
這是我之前寫的一篇java實現推箱子演算法的文章,簡單的給你看一下:
《推箱子游戲》是一款益智游戲,游戲目標是搬運工自己來找出到某個位置的最短路徑,然後自己走過去。
最後完成地圖顯示問題,每個節點存儲自己父親節點的地址,當節點發現自己已經完成之後根據地址向上查找直到樹頂,望採納,謝謝。