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

📄 da07b.htm

📁 数据结构(cc++)1800例题与答案,值得一看
💻 HTM
📖 第 1 页 / 共 5 页
字号:
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">{<B 
style="mso-bidi-font-weight: normal">for</B> (i=1;i&lt;=n;i++)<SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">邻接表表头向量初始化。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN>{scanf(&amp;gl[i].vertex); 
gl[i].firstarc=null;}<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><B 
style="mso-bidi-font-weight: normal">for</B> 
(i=1;i&lt;=n;i++)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><B 
style="mso-bidi-font-weight: normal">for</B> 
(j=1;j&lt;=n;j++)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN><B style="mso-bidi-font-weight: normal">if</B> 
(gm[i][j]==1)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>{p=(ArcNode *)malloc(sizeof(ArcNode)) ;//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">申请结点空间。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 79.5pt"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">p-&gt;adjvex=j;//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">顶点<SPAN 
lang=EN-US>I</SPAN>的邻接点是<SPAN lang=EN-US>j<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 79.5pt"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">p-&gt;next=gl[i].firstarc; 
gl[i].firstarc=p; //</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">链入顶点<SPAN 
lang=EN-US>i</SPAN>的邻接点链表中<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 79.5pt"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="TEXT-INDENT: 34.1pt; mso-char-indent-count: 2.99"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN>}//end<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="TEXT-INDENT: 34.1pt; mso-char-indent-count: 2.99"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">[</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">算法讨论<SPAN lang=EN-US>] 
</SPAN>算法中邻接表中顶点在向量表中的下标与其在邻接矩阵中的行号相同。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">8.[</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">题目分析<SPAN lang=EN-US>] 
</SPAN>在有向图中,判断顶点<SPAN lang=EN-US>Vi</SPAN>和顶点<SPAN 
lang=EN-US>Vj</SPAN>间是否有路径,可采用遍历的方法,从顶点<SPAN 
lang=EN-US>Vi</SPAN>出发,不论是深度优先遍历(<SPAN lang=EN-US>dfs</SPAN>)还是宽度优先遍历(<SPAN 
lang=EN-US>bfs</SPAN>),在未退出<SPAN lang=EN-US>dfs</SPAN>或<SPAN 
lang=EN-US>bfs</SPAN>前<SPAN lang=EN-US>,</SPAN>若访问到<SPAN 
lang=EN-US>Vj</SPAN>,则说明有通路,否则无通路。设一全程变量<SPAN lang=EN-US>flag</SPAN>。初始化为<SPAN 
lang=EN-US>0</SPAN>,若有通路,则<SPAN lang=EN-US>flag=1</SPAN>。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">算法<SPAN 
lang=EN-US>1</SPAN>:<B style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>int</SPAN></B><SPAN lang=EN-US> visited[]=0;<SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="COLOR: red">//</SPAN></SPAN><SPAN 
style="COLOR: red">全局变量,访问数组初始化</SPAN><SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 22.9pt; mso-char-indent-count: 2.0"><B 
style="mso-bidi-font-weight: normal"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">int</SPAN></B><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN>dfs(AdjList g , 
vi)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">以邻接表为存储结构的有向图<SPAN 
lang=EN-US>g</SPAN>,判断顶点<SPAN lang=EN-US>Vi</SPAN>到<SPAN 
lang=EN-US>Vj</SPAN>是否有通路<SPAN lang=EN-US>,</SPAN>返回<SPAN 
lang=EN-US>1</SPAN>或<SPAN lang=EN-US>0</SPAN>表示有或无<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 11.4pt; mso-char-indent-count: 1.0"><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN>{ visited[vi]=1;<SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>//visited</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">是访问数组,设顶点的信息就是顶点编号。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>p=g[vi].firstarc;<SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN>//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">第一个邻接点。<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><B 
style="mso-bidi-font-weight: normal">while</B> ( p!=null)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{ 
j=p-&gt;adjvex;<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B 
style="mso-bidi-font-weight: normal">if</B> (vj==j) { flag=1; <B 
style="mso-bidi-font-weight: normal">return</B></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">(<SPAN 
lang=EN-US>1</SPAN>)<SPAN lang=EN-US>;} //vi </SPAN>和<SPAN lang=EN-US> vj 
</SPAN>有通路。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B 
style="mso-bidi-font-weight: normal">if</B> (visited[j]==0) 
dfs(g,j);<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>p=p-&gt;next</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">;<SPAN lang=EN-US> }//<B 
style="mso-bidi-font-weight: normal">while</B> <o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B 
style="mso-bidi-font-weight: normal">if</B> (!flag) <B 
style="mso-bidi-font-weight: normal">return</B>(0);<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN>}//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">结束<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 22.8pt; mso-char-indent-count: 2.0"><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">[</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">算法讨论<SPAN lang=EN-US>] 
</SPAN>若顶点<SPAN lang=EN-US>vi</SPAN>和<SPAN lang=EN-US>vj 
</SPAN>不是编号,必须先用顶点定位函数<SPAN lang=EN-US>,</SPAN>查出其在邻接表顶点向量中的下标<SPAN 
lang=EN-US>i</SPAN>和<SPAN lang=EN-US>j</SPAN>。下面算法<SPAN 
lang=EN-US>2</SPAN>输出<SPAN lang=EN-US>vi </SPAN>到 <SPAN 
lang=EN-US>vj</SPAN>的路径,其思想是用一个栈存放遍历的顶点,遇到顶点<SPAN 
lang=EN-US>vj</SPAN>时输出路径。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">算法<SPAN 
lang=EN-US>2</SPAN>:<B style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>void</SPAN></B><SPAN lang=EN-US> dfs(AdjList g , <B 
style="mso-bidi-font-weight: normal">int</B> i)<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal 
style="TEXT-INDENT: 34.1pt; mso-char-indent-count: 2.99"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN>//</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">有向图<SPAN 
lang=EN-US>g</SPAN>的顶点<SPAN lang=EN-US>vi</SPAN>(编号<SPAN 
lang=EN-US>i</SPAN>)和顶点<SPAN lang=EN-US>vj</SPAN>(编号<SPAN 
lang=EN-US>j</SPAN>)间是否有路径,如有,则输出。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp; 
</SPAN>{<B style="mso-bidi-font-weight: normal">int</B> top=0,stack[]; 
//stack</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">是存放顶点编号的栈<SPAN 
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>visited[i]=1;<SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//visited 
</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">数组在进入<SPAN 
lang=EN-US>dfs</SPAN>前已初始化。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>stack[++top]=i;<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>p=g[i].firstarc; 
/</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">求第一个邻接点<SPAN 
lang=EN-US>.<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><B 
style="mso-bidi-font-weight: normal">while</B> (p)<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<B 
style="mso-bidi-font-weight: normal">if</B> 
(p-&gt;adjvex==j)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN-LEFT: 51.5pt; TEXT-INDENT: -79.55pt; mso-char-indent-count: -6.98; mso-para-margin-left: -2.46gd"><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>{stack[++top]=j; printf( "</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">顶点<SPAN lang=EN-US> vi 
</SPAN>和<SPAN lang=EN-US> vj </SPAN>的路径为:<SPAN 
lang=EN-US>\n");<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal 
style="MARGIN-LEFT: 51.5pt; TEXT-INDENT: -79.55pt; mso-char-indent-count: -6.98; mso-para-margin-left: -2.46gd"><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN><B style="mso-bidi-font-weight: normal">for</B> (i=1; i&lt;=top; i++) 
<SPAN style="mso-spacerun: yes">&nbsp;</SPAN>printf( "%4d",stack[i]); 
exit(0);<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN-LEFT: 51.3pt; mso-para-margin-left: 4.5gd"><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;</SPAN>}//<B 
style="mso-bidi-font-weight: normal">if</B><o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN-LEFT: 51.5pt; TEXT-INDENT: -79.55pt; mso-char-indent-count: -6.98; mso-para-margin-left: -2.46gd"><SPAN 
lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><SPAN 
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

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