首先什么是电路布线问题呢?电路布线问题是类似于迷宫的问题,也是一个模拟矩阵,迷宫是每个点有8个方向可以走,但是在电路布线问题中每个点上只有上下左右4个方向可走。因为电路布线不允许对角线上布线,并且电路布线问题要求线路所走过的路程必须是最短的,即从出发点到目的点路径很可能有很多,要找的是经过跳数最少的那个。也就是说不能太多的弯儿,能直走的就直着走。
迷宫问题是只要找到出路,不管路径是如何的。在寻找通路阶段和走迷宫是差不多的,迷宫是将走过的路存储在栈中,通过试探与回溯的方法一步一步的往前行。此问题不能用栈来做了,而是用队列来辅助实现,因为要将所有的可行的点都走一遍,并把所有可行点距离出发点的路径值也要表示出来,根据这个路径值来找出最短的路径来。
使用一个矩阵来表示一个算是迷宫的东西,用0来表示可通过,用1表示不可通过。下面是模拟矩阵:
1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1
1 1 0 0 0 1 0 1
1 0 1 1 0 0 0 1
1 0 0 0 1 1 0 1
1 0 1 1 1 0 0 1
1 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1
起点是:(1,1),目的点是(6,3)。
使用结构体来表示每一个点周边可行的路线,这是一个包含行和列值的结构体,Position(row,col)。而且每个点都是四个方向,这其中有的可行有的不可行,将其存储在一个数组中Position offset[offset_num];
以下是数组中不同的元素所代表的不同方向:
row col direc