尋找電路佈線最短路徑演算法BFS

2021-09-28 00:26:55 字數 2854 閱讀 4982

問題定義:

將佈線區域劃分成一格n*m的網格,網格內用-1來標識障礙點,求網格內一點到另一點之間的最短路徑。

思想:1、標記距離:

先用bfs的方法將網格做個標記,在經過每個的點的位置上記錄一下該點到初始點start之間的距離,一直到終點end

2、回走記錄路徑:

從終點往回走,每次只走到比當前位置與開始點start距離小1的位置,邊走邊記錄路徑。

開始時地圖:(-1表示障礙不能走,0表示能走)

-1  -1  -1  -1  -1  -1  -1  -1  -1

-1 0 0 -1 0 0 0 0 -1

-1 0 0 -1 -1 0 0 0 -1

-1 0 0 0 0 -1 0 0 -1

-1 0 0 0 -1 -1 0 0 -1

-1 -1 0 0 0 -1 0 0 -1

-1 -1 -1 -1 0 0 0 0 -1

-1 -1 -1 -1 0 0 0 0 -1

-1 -1 -1 -1 -1 -1 -1 -1 -1

**

#include

#include

#include

using namespace std;

const

int m =9;

const

int maxlen =30;

class

point

;int dx[4]

=;//x、y方向上的增量 上右下左

int dy[4]

=;void

findpath

(int g[

][m]

,point start,point finish,

int& pathlen,point* path)

point cur,next;

g[start.x]

[start.y]=1

;//封鎖開始點

queue<

int>

qx,qy;

//座標佇列

qx.push

(start.x)

; qy.

push

(start.y)

;//開始點進入佇列

while

(!qx.

empty()

)

qx.push

(next.x)

; qy.

push

(next.y);}

}if(next.x == finish.x && next.y == finish.y)

break

;//已到達出口

}//構造路徑

pathlen = g[finish.x]

[finish.y]

; cur = finish;

for(

int i = pathlen-

1; i >=

0; i--)}

cur = next;

//移動到當前位置 }}

intmain()

for(

int i =

1; i < m-

1; i++

)//初始化網格內區域為0

g[5][

1]=-

1; g[6]

[1]=

-1; g[6]

[2]=

-1; g[6]

[3]=

-1; g[7]

[1]=

-1; g[7]

[2]=

-1; g[7]

[3]=

-1; g[1]

[3]=

-1; g[2]

[3]=

-1; g[2]

[4]=

-1; g[3]

[5]=

-1; g[4]

[4]=

-1; g[4]

[5]=

-1; g[5]

[5]=

-1;// 內部設牆

for(

int i =

0; i < m; i++

) cout<

} start.x =

3; start.y =

2; finish.x =

4; finish.y =6;

point *path =

newpoint

[m*m]

;findpath

(g,start,finish,pathlen,path)

;for

(int i =

0; i < m; i++

) cout<

}for

(int i =

0; i < pathlen; i++

)for

(int i =

0; i < m; i++

) cout<

}return0;

}

輸出:

尋找電路佈線最短路徑 Queue

bool findpath position start,position finish,int pathlen,position path 初始化包圍網格的圍牆 for int i 0 i m 1 i 初始化offset position offset 4 offset 0 row 0 offse...

求解最短路徑之電路佈線

a和b之間的最短路徑需要在兩個過程中確定。乙個是距離標記過程,另乙個是路徑標記過程。在距離標記過程中,先從位置a開始,把從a可到達的相鄰方格都標記為1 表示與a相距為1 然後把從編號為1的方格可到達的相鄰方格都標記為2 表示也a相鄰為2 這個標記過程繼續下去直到到達b或者沒有可到達相鄰方格為止。距離...

C 電路佈線 最短路徑問題

問題描述 用二維陣列表示地圖,若值為 1 則表示有障礙物,若值為 0 則表示可以通行。輸入 m n 的二維陣列,佈線起點座標,佈線終點座標。輸出 最短佈線距離以及對應的佈線路徑。問題分析 從起點開始佈線,將起點標記為 0 把四周可佈線的位置標記為 起點標記值 1 同時將這些點插進佇列 q 插到隊尾 ...