├── map.temp ├── README.md ├── tb.png ├── map.png ├── api.php ├── index.php ├── map.php └── b.html /map.temp: -------------------------------------------------------------------------------- 1 | 恩施自治区,宜昌,荆门市 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # -实现路径最短, 2 | 模拟物体移动 3 | -------------------------------------------------------------------------------- /tb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/php_map/master/tb.png -------------------------------------------------------------------------------- /map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/php_map/master/map.png -------------------------------------------------------------------------------- /api.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |
12 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/map.php:
--------------------------------------------------------------------------------
1 | ['b' => 69],
15 | 'b' => ['a' => 69, 'e' => 59, 'f' => 210],
16 | 'c' => ['f' => 75],
17 | 'd' => ['e' => 180],
18 | 'e' => ['b' => 59, 'd' => 180, 'g' => 100, 'f' => 290],
19 | 'f' => ['g' => 200, 'e' => 290, 'b' => 210, 'c' => 75],
20 | 'g' => ['e' => 100, 'f' => 200],
21 | ];
22 | function find($node, $list, $next, $a = [])
23 | {
24 | if (count($next) == count($list)) {
25 | return $_GET = [array_merge($next, $a)];
26 | }
27 | foreach ($list[$node[strlen($node) - 1]] as $k => $v) {
28 | foreach ($next as $n => $m) {
29 | if ($k == $n[strlen($n) - 1]) {
30 | unset($list[$node][$k]);
31 | }
32 | }
33 | }
34 | foreach ($list[$node[strlen($node) - 1]] as $k => $v) {
35 | $a[$node . $k] = $next[$node] + $v;
36 | }
37 | foreach ($a as $k => $v) {
38 | foreach ($next as $n => $m) {
39 | if ($k[strlen($k) - 1] == $n[strlen($n) - 1]) {
40 | unset($a[$k]);
41 | }
42 | }
43 | }
44 | foreach ($a as $k => $v) {
45 | if (!isset($smallest) || $smallest > $v) {
46 | $smallest = $v;
47 | $node = $k;
48 | }
49 | }
50 | //$node=$node[strlen($node)-1];
51 | $next[$node] = $smallest;
52 | unset($smallest);
53 | find($node, $list, $next, $a);
54 | }
55 |
56 | function getRouter($start, $end)
57 | {
58 |
59 | $city_code = [
60 | 'a' => "十堰市",
61 | 'b' => "荆门市",
62 | 'c' => "黄冈市",
63 | 'd' => "恩施自治区",
64 | 'e' => "宜昌",
65 | 'f' => "武汉",
66 | 'g' => "荆州市",
67 | ];
68 |
69 |
70 | $msg = ["router" => [], "len" => ""];
71 |
72 | foreach ($_GET[0] as $key => $val) {
73 |
74 |
75 | if ($start == $city_code[$key[0]] && $end == $city_code[$key[(strlen($key)) - 1]]) {
76 | $rarray = array();
77 | for ($i = 0; $i < strlen($key); $i++) {
78 | $rarray[$i] = $city_code[$key[$i]];
79 | }
80 | $msg['len'] = $val;
81 | $msg['router'] = $rarray;
82 | }
83 |
84 |
85 | }
86 | return $msg;
87 | }
88 |
89 | $ms =null;
90 |
91 | if (@$_POST['start'] != "" && @$_POST['end']!="") {
92 |
93 |
94 | $startname = @$_POST['start'];
95 | $endname = @$_POST['end'];
96 | $city_codes = [
97 | '十堰市' => "a",
98 | '荆门市' => "b",
99 | '黄冈市' => "c",
100 | '恩施自治区' => "d",
101 | '宜昌' => "e",
102 | '武汉' => "f",
103 | '荆州市' => "g",
104 | ];
105 | find($city_codes[$startname], $list, [$endname => 0]);
106 | $ms = getRouter($startname, $endname);
107 | echo "路线指示:";
108 | $msg="";
109 | foreach($ms['router'] as $key=>$val){
110 | echo "--->".$val;
111 | $msg.=$val.",";
112 | }
113 | $msg=substr($msg, 0, -1);
114 | $fopen=fopen("map.temp","wb")or die('文件不在');
115 | fwrite($fopen,$msg);
116 | fclose($fopen);
117 | echo "