⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 迷宫探路iii(最短路径)_数据结构与算法_数据结构算法_c语言_c 语言之家.htm

📁 严蔚民版的数据结构的完整课件
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      width="100%">
        <TBODY>
        <TR>
          <TD align=middle vAlign=top width="95%">
            <TABLE border=1 borderColor=#e2ca9f cellPadding=0 cellSpacing=0 
            width="100%">
              <TBODY>
              <TR>
                <TD align=middle 
                background="迷宫探路III(最短路径)_数据结构与算法_数据结构算法_C语言_C 语言之家.files/002.jpg" 
                borderColor=#e2ca9f vAlign=top width="69%">
                  <TABLE align=center border=0 cellPadding=0 cellSpacing=0 
                  width="100%">
                    <TBODY>
                    <TR>
                      <TD height=40 width="100%"></TD></TR>
                    <TR>
                      <TD>
                        <FORM action=Readnews.asp?newsid=2584&amp;id2=2584 
                        method=post name=form1>
                        <CENTER><!-- <input type=submit name=aa value="点击关闭浮动图标" width=20 title="点击广告支持本站">--></CENTER></FORM></TD></TR>
                    <TR>
                      <TD align=middle bgColor=#dddddd height=20 
                      style="FONT-SIZE: 18px" vAlign=bottom 
                        width="85%"><STRONG><FONT color=#003399 
                        size=4><B>迷宫探路III(最短路径) </B></FONT></STRONG></TD><BR></TR>
                    <TR>
                      <TD align=middle width="100%"><BR></TD></TR>
                    <TR>
                      <TD align=middle style="FONT-SIZE: 9pt" 
                        width="100%">发表日期:2003年10月15日&nbsp;&nbsp;出处:朱清&nbsp;&nbsp;作者:朱清&nbsp;&nbsp;已经有2879位读者读过此文</TD></TR>
                    <TR>
                      <TD align=middle width="100%"><!--下面的这一句是设置阅读文本区的宽度-->
                        <TABLE align=center border=0 cellPadding=0 cellSpacing=0 
                        style="TABLE-LAYOUT: fixed" width="90%">
                          <TBODY>
                          <TR>
                            <TD align=middle width="100%"></TD></TR>
                          <TR>
                            <TD style="WORD-WRAP: break-word"><FONT 
                              class=news><BR>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;将从迷宫入口到各点的最短路近的集合看作一棵树。用广度遍历<BR>&nbsp;&nbsp;的方法即可找到出口的最短路近。本程序算法思想来源于求图上一点<BR>&nbsp;&nbsp;到其余各点最短路近的Dijkstra算法。</P>
                              <P>&nbsp;/* 迷宫探路III(最短路径)*/<BR>/* DIJKSTRAMAZE.C 
                              */<BR>/* 2003-8-26 */<BR>#include 
                              &lt;stdlib.h&gt;<BR>#include 
                              &lt;time.h&gt;<BR>#include 
                              &lt;math.h&gt;<BR>#include 
                              &lt;stdio.h&gt;<BR>#include 
                              &lt;graphics.h&gt;<BR>#define N 22<BR>#define M 
                              22<BR>int bg[M][N];<BR>int aa[M][N];<BR>struct 
                              pace{<BR>&nbsp;&nbsp;&nbsp; int 
                              pre;<BR>&nbsp;&nbsp;&nbsp; int 
                              x;<BR>&nbsp;&nbsp;&nbsp; int 
                              y;<BR>&nbsp;&nbsp;&nbsp; int 
                              ri;<BR>&nbsp;&nbsp;&nbsp; int 
                              rj;<BR>}road[M*N];<BR>struct pace 
                              bestroad[M*N];</P>
                              <P><BR>void makebg(int,int);<BR>void 
                              drawbg(int[][],int,int,int,int,int);<BR>void 
                              drawman(int,int,int);<BR>void 
                              rect(int,int,int,int);</P>
                              <P>void main(){/* main()开始 */<BR>int 
                              step=20;<BR>int len=10;<BR>int size=20;<BR>int 
                              x=0,y=0;<BR>int i=0,j=0;<BR>int 
                              gdriver=DETECT,gmode;<BR>char ch;<BR>int 
                              direc;<BR>int routelen=0;<BR>int 
                              dj[]={-1,1,0,0};<BR>int di[]={0,0,-1,1};<BR>int 
                              begin;<BR>int end;<BR>int k;<BR>int t;<BR>int 
                              num;<BR>int suc;<BR>int cnt;<BR>int x0;<BR>int 
                              y0;<BR>int le;<BR>int 
                              tmp;<BR>makebg(M,N);<BR>/*&nbsp;&nbsp;registerbgidriver(EGAVGA_driver);<BR>&nbsp;initgraph(&amp;gdriver,&amp;gmode,"c:\\turboc2");*/<BR>&nbsp;initgraph(&amp;gdriver,&amp;gmode,"c:\\tc20\\bgi"); 
                              <BR>cleardevice();<BR>setwritemode(XOR_PUT);<BR>settextstyle(1,0,3);<BR>setcolor(GREEN);<BR>outtextxy(100,180,"DIJKSTRA 
                              MAZE");<BR>setcolor(BLUE);<BR>setfillstyle(LINE_FILL,BLUE);</P>
                              <P>/*drawbg(bg,M,N,size,0,0);*/<BR>drawbg(aa,M,N,size,0,0);<BR>setcolor(WHITE);<BR>x+=len;y+=len;<BR>drawman(x,y,len);<BR>x0=x;y0=y;<BR>/* 
                              电脑控制 
                              */<BR>i=j=0;<BR>aa[0][0]=1;<BR>begin=0;<BR>end=0;<BR>road[0].ri=0;<BR>road[0].rj=0;<BR>road[0].x=x0;<BR>road[0].y=y0;<BR>road[0].pre=-1;<BR>le=1;<BR>suc=0;<BR>while(!suc){<BR>cnt=0;<BR>le++;<BR>for(k=begin;k&lt;=end;k++){<BR>&nbsp;&nbsp;&nbsp; 
                              for(t=0;t&lt;4;t++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              x=road[k].x+dj[t]*step;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              y=road[k].y+di[t]*step 
                              ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              i=road[k].ri+di[t];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              j=road[k].rj+dj[t];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(i&lt;M&amp;&amp;i&gt;=0&amp;&amp;j&lt;N&amp;&amp;j&gt;=0&amp;&amp;aa[i][j]==0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              cnt++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              aa[i][j]=le;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              road[end+cnt].pre=k;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              road[end+cnt].x=x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              road[end+cnt].y=y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              road[end+cnt].ri=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              road[end+cnt].rj=j;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(i==N-1&amp;&amp;j==M-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              suc=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
                              if(suc)break;<BR>}<BR>begin=end+1;<BR>end=end+cnt;<BR>}<BR>/* 
                              output 
                              */<BR>i=end;j=0;<BR>while(i!=-1){<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j].x=road[i].x;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j].y=road[i].y;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j].ri=road[i].ri;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j].rj=road[i].rj;<BR>&nbsp;&nbsp;&nbsp; 
                              i=road[i].pre;<BR>&nbsp;&nbsp;&nbsp; 
                              j++;<BR>}<BR>for(i=0;i&lt;j/2;i++){<BR>&nbsp;&nbsp;&nbsp; 
                              tmp=bestroad[i].x;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[i].x=bestroad[j-1-i].x;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j-1-i].x=tmp;<BR>&nbsp;&nbsp;&nbsp; 
                              tmp=bestroad[i].y;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[i].y=bestroad[j-1-i].y;<BR>&nbsp;&nbsp;&nbsp; 
                              bestroad[j-1-i].y=tmp;<BR>}<BR>getch();<BR>drawman(x0,y0,len);<BR>for(i=0;i&lt;j;i++){<BR>&nbsp;&nbsp;&nbsp; 
                              drawman(bestroad[i].x,bestroad[i].y,len);<BR>&nbsp;&nbsp;&nbsp; 
                              delay(80000);<BR>&nbsp;&nbsp;&nbsp; 
                              drawman(bestroad[i].x,bestroad[i].y,len);<BR>}<BR>i--;<BR>drawman(bestroad[i].y,bestroad[i].x,len);<BR>getch();<BR>closegraph();<BR>}<BR>/* 
                              main()结束 */</P>
                              <P>/* 绘制小人 */<BR>void drawman(int x,int y,int 
                              len){<BR>&nbsp;&nbsp;&nbsp; int 
                              r=len/4;<BR>&nbsp;&nbsp;&nbsp; 
                              rect(x-r,y-len,x+r,y-len+2*r);<BR>&nbsp;&nbsp;&nbsp; 
                              line(x,y-len+2*r,x,y);<BR>&nbsp;&nbsp;&nbsp; 
                              line(x-len,y,x+len,y);<BR>&nbsp;&nbsp;&nbsp; 
                              line(x,y,x-len,y+len);<BR>&nbsp;&nbsp;&nbsp; 
                              line(x,y,x+len,y+len);<BR>}<BR>/* 绘制迷宫地图 
                              */<BR>void drawbg(int bg[][N],int a,int b,int 
                              size,int x,int y){<BR>&nbsp;&nbsp;&nbsp; int 
                              startx=x;<BR>&nbsp;&nbsp;&nbsp; int 
                              i,j;<BR>&nbsp;&nbsp;&nbsp; 
                              for(i=0;i&lt;a;i++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;b;j++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(bg[i][j]==-1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect(x,y,x+size-1,y+size-1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              x+=size;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              x=startx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              y+=size;<BR>&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp; 
                              rectangle(0,0,size*b,size*a);<BR>&nbsp;&nbsp;&nbsp; 
                              line(0,0,size,0);line(0,0,0,size);<BR>&nbsp;&nbsp;&nbsp; 
                              line(size*b,size*(a-1),size*b,size*a);<BR>&nbsp;&nbsp;&nbsp; 
                              line(size*(b-1),size*a,size*b,size*a);<BR>}<BR>/* 
                              绘制实心矩形 */<BR>void rect(int x0,int y0,int x1,int 
                              y1){<BR>&nbsp;&nbsp;&nbsp; int 
                              i,j;<BR>&nbsp;&nbsp;&nbsp; 
                              for(i=x0;i&lt;=x1;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              line(i,y0,i,y1);<BR>}</P>
                              <P>/* 随机生成代表迷宫地图的数组&nbsp; */<BR>void makebg(int 
                              a,int b){<BR>&nbsp;&nbsp;&nbsp; int 
                              i,j;<BR>&nbsp;&nbsp;&nbsp; int 
                              ran;<BR>&nbsp;&nbsp;&nbsp; int direc;<BR>/* 
                              初始化迷宫地图&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
                              for(i=0;i&lt;a;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;b;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              bg[i][j]=1;</P>
                              <P>/* 随机生成迷宫通路&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
                              randomize();<BR>&nbsp;&nbsp;&nbsp; 
                              i=j=0;direc=2;<BR>&nbsp;&nbsp;&nbsp; while(1){</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              bg[i][j]=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(i&gt;=M-1&amp;&amp;j&gt;=N-1)break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              ran=(int)rand()*4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(ran&lt;1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(direc!=1&amp;&amp;i&lt;a-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              i++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              direc=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }&nbsp;&nbsp;&nbsp; 
                              <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              if(ran&lt;2){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(direc!=2&amp;&amp;j&gt;0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              j--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              direc=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              if(ran&lt;3){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(direc!=3&amp;&amp;i&gt;0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              i--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              direc=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(direc!=0&amp;&amp;j&lt;b-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              j++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              direc=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>/* 
                              随机生成迷宫其余部分&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
                              for(i=0;i&lt;a;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;b;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(bg[i][j]==1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              ran=(int)rand()*10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(ran&lt;5)bg[i][j]=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -