dfs-邻接矩阵的所有路径 怎么排除重复节点

问题描述

邻接矩阵的所有路径 怎么排除重复节点
用的是深度优先 不知道代码问题在哪 怎么才能实现不经过重复节点

#include
#include
#include
#define MAX 20
typedef int VexType;

typedef VexType Mgraph[MAX][MAX];
void creat_mg(Mgraph G);
void output_mg(Mgraph G);
Mgraph G1;
Mgraph G;
int stack[120] m=1 n x y;///存储路径
int nev0;

void main()
{
int ij;
creat_mg(G1);
output_mg(G1);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(G1[i][j]==65532)
G[i][j]=0;
else
G[i][j]=1;
}
scanf(""%d %d"" &x &y);
stack[0]=x;
dfs(xy);
system(""pause"");
}

void creat_mg(Mgraph G)
{ int ijk;

printf (""n这是美国的网络拓扑图,18个节点,22个链路,如(1822)"");
n=18;
e=22;
for (i=1;i<=18;i++)
{for (j=1;j<=22;j++)
G[i][j]=65532;
} //将邻接矩阵初始化 for (k=1;k<=e;k++)
G[1][2]=2100; G[2][1]=2100;
G[2][3]=1200; G[3][2]=1200;
G[1][3]=3000; G[3][2]=3000;
G[2][4]=1500; G[4][2]=1500;
G[1][8]=4000; G[8][1]=4000;
G[3][6]=3600; G[6][3]=3600;
G[6][10]=2100; G[10][6]=2100;
G[4][5]=1200; G[5][4]=1200;
G[7][5]=1200; G[5][7]=1200;
G[5][6]=1400; G[6][5]=1400;
G[7][10]=2700; G[10][7]=2700;
G[7][8]=1500; G[8][7]=1500;
G[6][14]=3600; G[14][6]=3600;
G[9][10]=1500; G[10][9]=1500;
G[8][9]=1500; G[9][8]=1500;
G[14][18]=300; G[18][14]=300;
G[9][18]=600; G[18][9]=600;
G[12][14]=600; G[14][12]=600;
G[4][11]=3900; G[11][4]=3900;

G[11][12]=1200; G[12][11]=1200;

G[9][12]=600; G[12][9]=600;

G[18][11]=1500; G[11][18]=1500;

//邻接矩阵是对称矩阵

}

void output_mg(Mgraph G)
{
int ij;

for (i=1;i<=n;i++)

{

printf (""n"");
for (j=1;j<=n;j++)

printf (""%d ""G[i][j]);

}

printf (""n"");
}

int dfs(int pint q)
{
int ij;
for(i=1;i<=n;i++)
{
if(G[p][i]==1)
{
if(i==q)///如果深搜到了终点,就输出刚才经过的路径
{
for(j=0;j<m;j++)
{
printf(""%-5d""stack[j]);
}
printf(""%-5dn"" q);
}
else///如果该点不是终点
{
G[p][i]=0;
G[i][p]=0;
stack[m]=i;///将该点存起来
m++;
dfs(iq);///接着深搜
G[p][i]=1;
G[i][p]=1;
m--;
}
}
}
}

解决方案

http://wenku.baidu.com/link?url=WtNOI1ojokVsXT3LiWmCRg6IAyNRm5U_rwq_-Os_C_aDnZBtjtTNMKTANv-RpyP_LjRtrx9tgXejbsHNzTNju3UoEDcqJX_2xXpgYXfxifu
http://itlab.idcquan.com/Java/base/926680.html

时间: 2024-11-17 20:58:34

dfs-邻接矩阵的所有路径 怎么排除重复节点的相关文章

排除重复的字符串

重复|字符串 '排除重复的字符串 Function GetNotRepeat(ByVal ArrList As ArrayList) As ArrayList Dim i As Integer : Dim TmpArrayList As New ArrayList For i = 0 To ArrList.Count - 1 If Not TmpArrayList.Contains(ArrList(i)) Then TmpArrayList.Add(ArrList(i)) End If Next

SQL排除重复结果只取字段最大值分享_MsSql

如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条). 复制代码 代码如下: select * from [Sheet1$] awhere  ID not exists (select 1 from [Sheet1$] where PID=a.PID and ID>a.ID) select a.* from [Sheet1$] a inner join (select PID,max(ID) as max_id from [Sheet1$]

SQL排除重复结果只取字段最大值分享

如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条).复制代码 代码如下:select * from [Sheet1$] awhere  ID not exists (select 1 from [Sheet1$] where PID=a.PID and ID>a.ID) select a.* from [Sheet1$] a inner join (select PID,max(ID) as max_id from [Sheet1$] gr

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

请问关于扁平化treeview的问题?重复节点冲突更名的处理是怎样的?

问题描述 请问关于扁平化treeview的问题?重复节点冲突更名的处理是怎样的? 请问关于扁平化treeview的问题,怎么将超深的节点扁平化到所在的上一级上?重复节点冲突更名的处理是怎样的? 解决方案 你可以对冲突的节点改名,比如用它上一层节点名作为前缀.

php数组对百万数据进行排除重复数据的实现代码_php技巧

假如得到一个uid列表,数量在百万行以上,格式如下: 复制代码 代码如下: 10001000 10001001 10001002 ...... 10001000 ...... 10001111 其实利用php数组的特性,很好进行排重,我们先来看一下php数组的定义:PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性.数组元素

数据库查询排除重复记录的方法_数据库其它

今天由于工作需要,需要在数据库中找出某一字段下不同的记录值,很简单的问题被我想的太复杂,很是郁闷,原因是SQL的一条命令忘了,现问题已解决,赶快拿来做备忘. 其实这里只需要用到SQL中的DISTINCT命令即可,非常简单,语法如下: 复制代码 代码如下: SELECT DISTINCT 列名称 FROM 表名称 举例说明: 假设现有一个数据库表:htmer: 复制代码 代码如下: field001 记录1 记录2 记录1 记录3 现在这张表中有四条记录,但有一条记录是重复的,如果我要去掉该重复记

ASP数组排除重复内容的函数

<%'原数组u_id="0,1,2,3,4,5"'去除不显示的内容a_id="1,2,3"if trim(u_id)<>"" thenDim MyArray_cj,i_cjMyArray_cj=trim(u_id) MyArray_cj=split(MyArray_cj,",") 'MyArray = Array(myarray)For i_cj = 0 to Ubound(MyArray_cj) b=0a=

sqlserver合并DataTable并排除重复数据的通用方法分享

代码如下: 复制代码 代码如下: ///<summary> /// 将两个列不同的DataTable合并成一个新的DataTable ///</summary> ///<param name="dt1">源表</param> ///<param name="dt2">需要合并的表</param> ///<param name="primaryKey">需要排重列表