博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回溯法关于图
阅读量:1887 次
发布时间:2019-04-26

本文共 1224 字,大约阅读时间需要 4 分钟。

图的结构体定义

typedef struct {	int adjvex;	EdgeNode *next;}EdgeNode;typedef struct{	int data;	EdgeNode *firstEdge;}Vertex;typedef struct {	Vertex adjList[maxsize];	int n,e;}AGraph;

1.假设图G采用邻接表存储,设设计一个算法,输出此图G从顶点vi到vj长度为L的所有简单路径

int visited[maxsize];int path[maxsize];void printAllPath(AGraph *g,int vi,int vj,int d,int L){	EdgeNode *p;int i;	if(vi==vj&&d==L)	{		cout<<"one path:";		for(i=0;i<=d;i++)			cout<
<<" "; } ++d; path[d]=vi; visited[vi]=1; p=g->adjList[vi].firstedge; while(p!=NULL) { if(visited[p->adjvex]==0) printAllPath(g,p->adjvex,vj,d,L); p=p->next; } visited[vi]=0; --d;}

2.藏宝图,设计一个算法,要求从入口到出口,必须经过v1,v6,不得经过v4

int visited[maxsize];int path[maxsize];int d=-1;int cond(int v1,int v4,int v6){	int flag1=0,flag2=0,flag3=1,i;	for(i=0;i<=d;i++)	{		if(path[i]==v1) 			flag1=1;		else if(path[i]==v4)			flag3=0;		else if(path[i]==v6)			flag2=1;	}	return flag1&&flag2&&flag3;} void printPath(AGraph *g,int vi,int vj,int v1,int v4,int v6){	EdgeNode *p;int i;	if(vi===vj&&cond(v1,v4,v6))	{		for(i=0;i<=d;i++)			cout<
<<" "; } ++d;path[d]=vi; visited[vi]=1; p=g->adjList[vi]->firstedge; while(p!=NULL) { if(visited[p->adjvex]==0) printPath(g,p->adjvex,vj,v1,v4,v6); p=p->next; } visited[vi]=0; --d;}

 

转载地址:http://tzzdf.baihongyu.com/

你可能感兴趣的文章
关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法
查看>>
Jquery基本用法总结--很有用!
查看>>
sql中时间日期操作(时间日期函数,时间日期格式,时间日期转换参数,时间日期比较,时间日期计算)
查看>>
无法将类型为“Microsoft.SqlServer.Management.Smo.SimpleObjectKey”的对象强制转换
查看>>
Sql Server中的修复命令
查看>>
“互普威盾”网络监管平台,能管住IT人吗?
查看>>
SQL SERVER实用经验技巧集
查看>>
【运维心得】SQL减小日志文件的命令
查看>>
SQL查询数据库里表大小的命令
查看>>
crystal的部署步骤
查看>>
CS下在C#里调用显示水晶报表
查看>>
oo软件设计说明书结构
查看>>
转换数据类型是掉了大量数据.没有备份,有log
查看>>
【开发心得】eclipse的workspace应该怎么用?
查看>>
【时间之外】机器学习与优化-1
查看>>
【运维心得】如何应对停电
查看>>
【温故而知新】2018-11-22怎么使用华为云1
查看>>
六步完成智能合约部署(亲测)
查看>>
电路板上的晶振不工作怎么办?
查看>>
看漫画学卷积运算~
查看>>