├── Dijkstra.html
├── Dijkstra.js
├── README.md
└── photoshow.js
/Dijkstra.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 | Dijkstra单源最短路径算法
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
166 |
181 |
182 | 输入权值并按确定更改
183 |
184 |
185 |
取消
186 |
更改
187 |
删除该链路
188 |
189 |
190 |
操作说明
191 |
生成节点输入节点数后点击生成节点
192 |
生成链路鼠标点击两个节点之后即可生成链路
193 |
修改链路权值鼠标点击链路权值,在弹框中修改,也可以在弹框中选择删除该链路
194 |
生成最短路径输入出发节点后点击生成,即可开始动态演示路径查找
195 |
算法讲解Dijkstra单源最短路径——小鸡博客
196 | 源码地址
197 | Fork
198 | Follow
199 |
200 |
201 |
202 |
203 |
204 |
210 |
211 |
593 |
594 |
595 |
596 |
--------------------------------------------------------------------------------
/Dijkstra.js:
--------------------------------------------------------------------------------
1 |
2 | var MaxvertextType = 100
3 | var gigantic = 99999
4 |
5 | //邻接矩阵
6 | function Mgraph() {
7 | this.vex=new Array();
8 | this.edge=new Array();
9 | this.vexnum=MaxvertextType;
10 | this.arcnum=MaxvertextType;
11 | };
12 |
13 | function getVex(G,x){
14 | var i=0;
15 | for(;G.vex[i]!=x;i++);
16 | return i;
17 | }
18 |
19 |
20 | //单源最短路径算法
21 | function Dijkstra(g,x){
22 | var vexnum=g.vexnum;
23 | var vex=getVex(g,x);
24 | var dist= new Array();
25 | var path = new Array();
26 | path[0]=0;
27 | for (var i = 0; i < vexnum; ++i) {
28 | dist[i]=g.edge[vex][i];
29 | if(dist[i]!=gigantic)path[i]=0;
30 | }
31 | var S = new Array();
32 | S[0] = true;
33 | var dd;
34 | var dvex=0;
35 | for (var j = 0; j < vexnum-1; ++j) {
36 | dd=gigantic;
37 | for (var i = 1; i < vexnum; ++i) {
38 | if(dist[i]
38 |
39 |
40 |
41 | **部分javascript代码**
42 |
43 | ```java
44 |
45 | var MaxvertextType = 100
46 | var gigantic = 99999
47 |
48 | //邻接矩阵
49 | function Mgraph() {
50 | this.vex=new Array();
51 | this.edge=new Array();
52 | this.vexnum=MaxvertextType;
53 | this.arcnum=MaxvertextType;
54 | };
55 |
56 | function getVex(G,x){
57 | var i=0;
58 | for(;G.vex[i]!=x;i++);
59 | return i;
60 | }
61 |
62 |
63 | //单源最短路径算法
64 | function Dijkstra(g,x){
65 | var vexnum=g.vexnum;
66 | var vex=getVex(g,x);
67 | var dist= new Array();
68 | var path = new Array();
69 | path[0]=0;
70 | for (var i = 0; i < vexnum; ++i) {
71 | dist[i]=g.edge[vex][i];
72 | if(dist[i]!=gigantic)path[i]=0;
73 | }
74 | var S = new Array();
75 | S[0] = true;
76 | var dd;
77 | var dvex=0;
78 | for (var j = 0; j < vexnum-1; ++j) {
79 | dd=gigantic;
80 | for (var i = 1; i < vexnum; ++i) {
81 | if(dist[i]{
87 |
88 | if (v.parentNode.localName!='a') {
89 | v.id=imgid;
90 | imgid++;
91 | v.addEventListener("click",function(e){ // 注册事件
92 | // 记录小图的位置个大小
93 | x=e.target.offsetLeft;
94 | y=e.target.offsetTop;
95 | w=e.target.offsetWidth;
96 | h=e.target.offsetHeight;
97 | src=e.target.src;
98 | id=e.target.id;
99 | // 创建遮罩层
100 | div=document.createElement("div");
101 | div.style.cssText=`
102 | position:fixed;
103 | left:0;
104 | top:0;
105 | bottom:0;
106 | right:0;
107 | background-color: rgba(25,25,25,0.8);
108 | z-index:99999999;
109 | transition:all .3s cubic-bezier(0.165, 0.84, 0.44, 1);
110 | `;
111 | document.body.appendChild(div);
112 | setTimeout(function(){
113 | div.style.opacity=1;
114 | },0);
115 | // (此处可以加loading)
116 |
117 | // 创建副本
118 | img=new Image();
119 | btnright=document.createElement("button");
120 | btnleft=document.createElement("button");
121 | img.src=src;
122 | style();
123 |
124 |
125 | btnleft.onclick=function(){
126 | if(id===0){
127 | alert("已经是第一张了!");
128 | return;
129 | }
130 | var left=document.getElementById(id-1);
131 | img.src=left.src;
132 | x=left.offsetLeft;
133 | y=left.offsetTop;
134 | w=left.offsetWidth;
135 | h=left.offsetHeight;
136 | style();
137 | id--;
138 | }
139 | btnright.onclick=function(){
140 | id++;
141 | if(id>=imgid){
142 | alert("已经是最后一张了!");
143 | return;
144 | }
145 | var right=document.getElementById(id);
146 | img.src=right.src;
147 | x=right.offsetLeft;
148 | y=right.offsetTop;
149 | w=right.offsetWidth;
150 | h=right.offsetHeight;
151 | style();
152 |
153 | }
154 | img.onload=function(){
155 | document.body.appendChild(img);
156 | document.body.appendChild(btnright);
157 | document.body.appendChild(btnleft);
158 |
159 | // 浏览器宽高
160 | wh=window.innerHeight;
161 | ww=window.innerWidth;
162 |
163 | // 目标宽高和坐标
164 | if(w/h> 0;
167 | tx=(ww - tw) / 2;
168 | ty=40;
169 | }
170 | else{
171 | tw=ww*0.8;
172 | th=h/w*tw >> 0;
173 | tx=ww*0.1;
174 | ty=(wh-th)/2;
175 | }
176 |
177 | // 延迟写入否则不会有动画
178 | setTimeout(function(){
179 | img.style.opacity=1;
180 | img.style.height=th+"px";
181 | img.style.width=tw+"px";
182 | img.style.left=tx+"px";
183 | img.style.top=ty+"px";
184 | btnleft.style.left=(tx-90)+"px";
185 | btnleft.style.top=(ty+th/2)+"px";
186 | btnright.style.left=(tx+tw+40)+"px";
187 | btnright.style.top=(ty+th/2)+"px";
188 | // 点击隐藏
189 | div.onclick=img.onclick=closeMove;
190 | },10);
191 | };
192 | });//end event
193 | }
194 | });//end forEach
--------------------------------------------------------------------------------