subject_56655.htm

来自「vc」· HTM 代码 · 共 24 行

HTM
24
字号
<p>
序号:56655 发表者:linyb 发表日期:2003-10-19 21:14:50
<br>主题:谁能告诉我迷宫问题的源代码(用C语言写).
<br>内容:请教个位专家:谁能告诉我迷宫问题的源代码(用C语言写).<BR>谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:jfkuo 回复日期:2003-10-21 13:44:39
<br>内容://有路径tc3.0通过<BR>#define null (void*)(0)<BR>#define m 6<BR>#define n 8<BR><BR>int maze[m+2][n+2]=<BR>{<BR>1,1,1,1,1,1,1,1,1,1,<BR>1,0,1,1,1,0,1,1,1,1,<BR>1,1,0,1,0,1,1,1,1,1,<BR>1,0,1,0,0,0,0,0,1,1,<BR>1,0,1,1,1,0,1,1,1,1,<BR>1,1,0,0,1,1,0,0,0,1,<BR>1,0,1,1,0,0,1,1,0,1,<BR>1,1,1,1,1,1,1,1,1,1<BR>};//maze,0:pass;1:no pass;<BR><BR>typedef struct<BR>{<BR>&nbsp;&nbsp;int x,y;<BR>}item;<BR><BR>item move[8]=<BR>{<BR> {0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}<BR>};<BR><BR>typedef struct<BR>{<BR>&nbsp;&nbsp;int x,y,d;<BR>}datatype;<BR><BR>typedef struct node<BR>{<BR>&nbsp;&nbsp;datatype data;<BR>&nbsp;&nbsp;struct node *next;<BR>}StackNode,*LinkStack;<BR><BR>LinkStack Init_LinkStack()<BR>{<BR>&nbsp;&nbsp;return null;<BR>}<BR>int Length_LinkStack(LinkStack s)<BR>{<BR>&nbsp;&nbsp;StackNode *p=s;<BR>&nbsp;&nbsp;int len=0;<BR>&nbsp;&nbsp;while(p!=null){len++;p=p-&gt;next;}<BR>&nbsp;&nbsp;return len;<BR>}<BR>int Empty_LinkStack(LinkStack s)<BR>{<BR>&nbsp;&nbsp;if(s==null) return 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else return 0;<BR>}<BR>LinkStack Push_LinkStack(LinkStack s,datatype inData)<BR>{<BR>&nbsp;&nbsp;StackNode *tmp;<BR>&nbsp;&nbsp;tmp=(StackNode *)(malloc(sizeof(StackNode)));//no consideration for the failure of malloc().<BR>&nbsp;&nbsp;tmp-&gt;data=inData;<BR>&nbsp;&nbsp;tmp-&gt;next=s;<BR>&nbsp;&nbsp;s=tmp;<BR>&nbsp;&nbsp;return s;<BR>}<BR>LinkStack Pop_LinkStack(LinkStack s,datatype *outData)<BR>{<BR>&nbsp;&nbsp;StackNode *tmp;<BR>&nbsp;&nbsp;if(s==null) return null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*outData=s-&gt;data;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp=s;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=s-&gt;next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(tmp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return s;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>int path(int maze[m+2][n+2],item move[8])<BR>{<BR>&nbsp;&nbsp;int i,j,x,y,d;<BR>&nbsp;&nbsp;StackNode *p;<BR>&nbsp;&nbsp;LinkStack s;<BR>&nbsp;&nbsp;datatype temp;<BR>&nbsp;&nbsp;s=Init_LinkStack();<BR>&nbsp;&nbsp;temp.x=1;temp.y=1;temp.d=-1;<BR>&nbsp;&nbsp;s=Push_LinkStack(s,temp);<BR>&nbsp;&nbsp;while(!Empty_LinkStack(s))<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;s=Pop_LinkStack(s,&amp;temp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;x=temp.x;y=temp.y;d=temp.d+1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(d&lt;8)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=x+move[d].x;j=y+move[d].y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(maze[i][j]==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;temp.x=x;temp.y=y;temp.d=d;<BR>&nbsp;&nbsp;&nbsp;&nbsp;s=Push_LinkStack(s,temp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;x=i;y=j;maze[x][y]=-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(x==m&amp;&amp;y==n)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.x=m;temp.y=n;temp.d=-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=Push_LinkStack(s,temp);//add the exit to the stack.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(s!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=s;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%d,%d\n&#34;,s-&gt;data.x,s-&gt;data.y);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=s-&gt;next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(p);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else d=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else d++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}//while(d&lt;8)<BR>&nbsp;&nbsp;}//while<BR>&nbsp;&nbsp;return 0;<BR>}<BR><BR>void main()<BR>{ <BR>&nbsp;&nbsp;path(maze,move);<BR>&nbsp;&nbsp;getch();<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jfkuo 回复日期:2003-10-21 13:45:48
<br>内容://最短路径tc3.0通过<BR>#define m 6<BR>#define n 8<BR>#define num 48<BR><BR>int maze[m+2][n+2]=<BR>{<BR>1,1,1,1,1,1,1,1,1,1,<BR>1,0,0,0,1,0,1,1,1,1,<BR>1,0,1,1,0,1,1,1,1,1,<BR>1,0,1,0,1,0,0,0,1,1,<BR>1,0,1,1,1,0,0,0,1,1,<BR>1,1,0,0,1,1,0,0,0,1,<BR>1,0,1,1,0,0,0,0,0,1,<BR>1,1,1,1,1,1,1,1,1,1<BR>};//maze,0:pass;1:no pass;<BR><BR>typedef struct<BR>{<BR>&nbsp;&nbsp;int x,y;<BR>}item;<BR>item move[8]=<BR>{<BR> {0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}<BR>};<BR><BR>typedef&nbsp;&nbsp;struct<BR>{<BR>&nbsp;&nbsp;int x,y;<BR>&nbsp;&nbsp;int pre;<BR>}sqtype;<BR><BR>void printpath(sqtype sq[num],int rear)/*print the path from the queue*/<BR>{<BR>&nbsp;&nbsp;int i;<BR>&nbsp;&nbsp;i=rear;<BR>&nbsp;&nbsp;do<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;(%d,%d)&lt;-&#34;,sq[i].x,sq[i].y);<BR>&nbsp;&nbsp;&nbsp;&nbsp;i=sq[i].pre;/*trace back*/<BR>&nbsp;&nbsp;}while(i!=-1);<BR>} /*printpath*/<BR><BR>int path(int maze[m+2][n+2],item move[8])<BR>{<BR>&nbsp;&nbsp;int x,y,i,j,v;<BR>&nbsp;&nbsp;sqtype sq[num];<BR>&nbsp;&nbsp;int front,rear;<BR>&nbsp;&nbsp;front=rear=0;<BR>&nbsp;&nbsp;sq[0].x=1;sq[0].y=1;sq[0].pre=-1;/*the entrance node of the queue*/<BR>&nbsp;&nbsp;maze[1][1]=-1;<BR>&nbsp;&nbsp;while(front&lt;=rear)/*queue is not null*/<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;x=sq[front].x;y=sq[front].y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(v=0;v&lt;8;v++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=x+move[v].x;j=y+move[v].y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(maze[i][j]==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;rear++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;sq[rear].x=i;sq[rear].y=j;sq[rear].pre=front;<BR>&nbsp;&nbsp;&nbsp;&nbsp;maze[i][j]=-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i==m&amp;&amp;j==n)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;printpath(sq,rear);/*print the path*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;//restore(maze);/*restore the maze:0 or 1*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}/*for v*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;front++;/*search the next node*/<BR>&nbsp;&nbsp;}/*while*/<BR>&nbsp;&nbsp;return 0;<BR>}/*path*/<BR><BR>void main()<BR>{ printf(&#34;\n&#34;);<BR>&nbsp;&nbsp;path(maze,move);<BR>&nbsp;&nbsp;getch();<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wangyy 回复日期:2003-10-22 21:24:51
<br>内容:能否加一些注释,让我们也了解了解。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

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