當前位置:首頁 » 編程語言 » 圖的演算法java

圖的演算法java

發布時間: 2025-01-11 05:57:07

❶ 求走迷宮問題的演算法,要求用java寫的

public class Maze { private int[][] maze = null;
private int[] xx = { 1, 0, -1, 0 };
private int[] yy = { 0, 1, 0, -1 };
private Queue queue = null; public Maze(int[][] maze) {
this.maze = maze;
queue = new Queue(maze.length * maze.length);
} public void go() {
Point outPt = new Point(maze.length - 1, maze[0].length - 1);
Point curPt = new Point(0, 0);
Node curNode = new Node(curPt, null);
maze[curPt.x][curPt.y] = 2;
queue.entryQ(curNode); while (!queue.isEmpty()) {
curNode = queue.outQ();
for (int i = 0; i < xx.length; ++i) {
Point nextPt = new Point();
nextPt.x = (curNode.point).x + xx[i];
nextPt.y = (curNode.point).y + yy[i];
if (check(nextPt)) {
Node nextNode = new Node(nextPt, curNode);
queue.entryQ(nextNode);
maze[nextPt.x][nextPt.y] = 2;
if (nextPt.equals(outPt)) {
java.util.Stack<Node> stack = new java.util.Stack<Node>();
stack.push(nextNode);
while ((curNode = nextNode.previous) != null) {
nextNode = curNode;
stack.push(curNode);
}
System.out.println("A Path is:");
while (!stack.isEmpty()) {
curNode = stack.pop();
System.out.println(curNode.point);
}
return;
}
}
}
}
System.out.println("Non solution!");
} private boolean check(Point p) {
if (p.x < 0 || p.x >= maze.length || p.y < 0 || p.y >= maze[0].length) {
return false;
}
if (maze[p.x][p.y] != 0) {
return false;
}
return true;
} public static void main(String[] args) {
int[][] maze = {
{ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
{ 0, 0, 1, 1, 1, 0, 0, 0, 1, 0 },
{ 0, 1, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1, 1, 0, 1, 0, 0 }
};
new Maze(maze).go();
} private class Queue { Node[] array = null;
int size = 0;
int len = 0;
int head = 0;
int tail = 0; public Queue(int n) {
array = new Node[n + 1];
size = n + 1;
} public boolean entryQ(Node node) {
if (isFull()) {
return false;
}
tail = (tail + 1) % size;
array[tail] = node;
len++;
return true;
} public Node outQ() {
if (isEmpty()) {
return null;
}
head = (head + 1) % size;
len--;
return array[head];
} public boolean isEmpty() {
return (len == 0 || head == tail) ? true : false;
} public boolean isFull() {
return ((tail + 1) % size == head) ? true : false;
}
} private class Node { Point point = null;
Node previous = null; public Node() {
this(null,null);
} public Node(Point point, Node node) {
this.point = point;
this.previous = node;
}
} private class Point { int x = 0;
int y = 0; public Point() {
this(0, 0);
} public Point(int x, int y) {
this.x = x;
this.y = y;
} public boolean equals(Point p) {
return (x == p.x) && (y == p.y);
} @Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
}

❷ 求java識別三角形,圓形,方形的具體演算法和原理。

首先圖片的背景和圖形的顏色肯定是不一樣的,圖片是由像素組成的(這個概念很重要),,第一步區分背景和圖形的顏色,保存背景的顏色,,第二步創建一個二維數組,這個二維數組對應於這個圖片,你比如說,我這個圖片是10*10大小的,然後我就把我這個數組保存是100*100的,即每隔0.1我取一下圖片的像素值,判斷這個像素值和背景是否一樣,如果一樣,那麼數組的對應位置就存儲0,否則存儲1,,,第三步,通過Java代碼控制滑鼠遍歷圖片,一行一行的遍歷,取像素值,與背景的像素對比,存入數組,遍歷之後二維數組就只是存儲的0和1(0代表背景,1代表圖形),,第四步,把所有為1的二維數組元素對應的坐標取出來,寫個方法判斷一下,相當於數軸知道X和Y了,你判斷一下圖形的形狀,應該不難。。。而且圖形就三個,,不難實現,,樓主可以試試

❸ java代碼怎麼實現計算圖像二值連通區域的質心

一:幾何距(Geometric Moments)知識與質心尋找原理

1. Image Moments是圖像處理中非常有用的演算法,可以用來計算區域圖像的質心,方向等幾何特性,同時Mpq的高階具有旋轉不變性,可以用來實現圖像比較分類,正是因為Moments有這些特性,很多手繪油畫效果也會基於該演算法來模擬實現。它的數學表達為:

它的低階M00,M01, M10可以用來計算質心,中心化以後M11,M02,M20可以用來計算區域的方向/角度

2. 什麼是質心

就是通過該點,區域達到一種質量上的平衡狀態,可能物理學上講的比較多,簡單點的說就是規則幾何物體的中心,不規則的可以通過掛繩子的方法來尋找。

二:演算法流程

1. 輸入圖像轉換為二值圖像

2. 通過連通組件標記演算法找到所有的連通區域,並分別標記

3. 對每個連通區域運用計算幾何距演算法得到質心

4. 用不同顏色繪制連通區域與質心,輸出處理後圖像

三:演算法效果

左邊為原圖, 右邊藍色為連通組件標記演算法處理以後結果,白色點為質心

四:關鍵代碼解析

1. 計算幾何距演算法代碼

doublem00 = moments(pixels, width, height, 0, 0);

doublexCr = moments(pixels, width, height, 1, 0) / m00;// row

doubleyCr = moments(pixels, width, height, 0, 1) / m00;// column

return new double[]{xCr, yCr};

❹ JAVA中最短路徑演算法

給你個算graph上最短路徑的比較流行的方法

Algorithm Dijkstra(V, E, cost, s)
T ;
Cost(V[s]) 0
Prev(V[s]) none
for i 0 to length[V] - 1 do
if (i 6= s) then
Cost(V[i]) +1
Prev(V[i]) none
Build heap NotInTree from V
for i 1 to length[V] do
u DeleteMin(NotInTree)
add (u, Prev(u)) to T
for each neighbor v of u do
if (Cost(v) > Cost(u) + cost(u,v)) then
Cost(v) Cost(u) + cost(u,v)
Prev(v) u
return T

熱點內容
閱讀腳本是什麼 發布:2025-01-11 08:39:27 瀏覽:777
booljava 發布:2025-01-11 08:36:08 瀏覽:767
我的世界伺服器必要弄的東西 發布:2025-01-11 08:32:56 瀏覽:424
postgre資料庫 發布:2025-01-11 08:32:22 瀏覽:480
android登錄源碼 發布:2025-01-11 08:32:10 瀏覽:675
壓縮機閉閥 發布:2025-01-11 08:27:19 瀏覽:671
dns伺服器地址陝西 發布:2025-01-11 08:24:59 瀏覽:45
學思維編程 發布:2025-01-11 08:24:59 瀏覽:609
愛如生資料庫 發布:2025-01-11 08:12:42 瀏覽:255
svm遺傳演算法 發布:2025-01-11 08:11:15 瀏覽:217