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

📄 所有路径.cpp

📁 数据结构学习用到的一些程序!!里面有二叉树相关的几个
💻 CPP
字号:
#include <stdio.h>
#include <malloc.h>
#define max 15
typedef struct graph 
{
	int  vexs[max];
	int  arcs[max][max];
	int  n;
	int  e;
}graph;
void creatgraph(graph *g) 
{
	int i,j,k;
	printf("请输入顶点个数和边数(不大于15)\n");
	scanf("%d%d",&(g->n),&(g->e));//n,e
	for (i=0;i<(g->n);i++)
	{
		g->vexs[i]=i;   //建立顶点,注意是从0开始!
	}
	for (i=0;i<g->n;i++)
		for(j=0;j<g->n;j++)
			g->arcs[i][j]=0;//边数组置0
	printf("输入边的信息!(注意结点是从0开始的)\n");
    for (k=0;k<g->e;k++)
	{
    	scanf("%d%d",&i,&j);     //输入边的两个顶点,建立的是有向图!
    	g->arcs[i][j]=1;

	}
}


int stack[30];    //用来存放路径的结点!
int count=0;      //计数路径!
void find(graph * g,int i,int d,int l,int p)//i是新取出的结点,d是第几次调用!初始值置1
{   
	int j;
	int t=d;         //用来存放递增归的次数,以放便进行输出操作!
	bool visited;
	stack[t]=i;
	if(i==p) //当新结点等于终点时,进行输出!
	{
		count++;
		printf("路径 %d",count);
		printf(" :");
		for (int m=0;m<=t;m++)
			printf("%d  ",stack[m]);
		printf("\n");
		return;
	}
		for (j=0;j<g->n;j++)
		{
			visited=true;
			for (int k=0;k<=t;k++)//当新取结点在已有结点集里,舍去!
				if (j==stack[k])
				{
					visited=false;
					break;
				}
			if(visited==true&&g->arcs[i][j]!=0)//当所取结点不在已有结点集,且结点与上个结点有路径时,进行下一层递归!
			{
			
				find(g,j,d+1,l,p); 
			}
		}

	
}


void Allway(graph *g,int l,int p) 
{
	int i;
    for (i=0;i<g->n;i++)    //当结点不等于开始结点时,进行递归!
		if(i!=l&&g->arcs[l][i]!=0)
		{
			stack[0]=l;
			find(g,i,1,l,p);
		}
}

void main() 
{
	    int v1,v2;
	    printf("先建立图!\n");
		struct graph * G;
		G=(graph *)malloc(sizeof(graph));
		creatgraph(G);
		printf("建立成功!\n");
		printf("输入开始结点和终止结点!\n");
		scanf("%d%d",&v1,&v2);
		Allway(G,v1,v2);
}



⌨️ 快捷键说明

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