graphsearch怎么用eagraph-cn?

graphsearch  时间:2021-02-19  阅读:()

我做了一个校园导游系统,选了十个景点 ,想输出走完十个景点的最短路径,和任意两个景点的最短路径怎么

#define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include typedef struct ArCell { int adj; //路径长度 }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵存储 typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息, { char name[30];//景点名 int num;//景点编号 char introduction[100];//简介 }infotype;//结点信息 typedef struct { infotype vexs[MAX_VERTEX_NUM];//数据域存储和边或弧相关的信息 AdjMatrix arcs;//弧的二维数组 int vexnum,um;//图的当前顶点数和弧数 }MGraph; MGraph b; void cmd(void); MGraph InitGraph(void); void Menu(void); void Browser(MGraph *G); void ShortestPath_DIJ(MGraph * G); void Floyd(MGraph *G); void Search(MGraph *G); int LocateVex(MGraph *G,char* v); MGraph * CreatUDN(MGraph *G); void print(MGraph *G); int main(void) { cmd(); return 0; } void cmd(void) { int i; b=InitGraph(); Menu(); scanf("%d",&i); while(i!=5) ...#define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include typedef struct ArCell { int adj; //路径长度 }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵存储 typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息, { char name[30];//景点名 int num;//景点编号 char introduction[100];//简介 }infotype;//结点信息 typedef struct { infotype vexs[MAX_VERTEX_NUM];//数据域存储和边或弧相关的信息 AdjMatrix arcs;//弧的二维数组 int vexnum,um;//图的当前顶点数和弧数 }MGraph; MGraph b; void cmd(void); MGraph InitGraph(void); void Menu(void); void Browser(MGraph *G); void ShortestPath_DIJ(MGraph * G); void Floyd(MGraph *G); void Search(MGraph *G); int LocateVex(MGraph *G,char* v); MGraph * CreatUDN(MGraph *G); void print(MGraph *G); int main(void) { cmd(); return 0; } void cmd(void) { int i; b=InitGraph(); Menu(); scanf("%d",&i); while(i!=5) { switch(i) { case 1:system("cls");Browser(&b);Menu();break; case 2:system("cls");ShortestPath_DIJ(&b);Menu();break; case 3:system("cls");Floyd(&b);Menu();break; case 4:system("cls");Search(&b);Menu();break; case 5:exit(1);break; default:break; } scanf("%d",&i); } } MGraph InitGraph(void) { MGraph G; int i,j; G.vexnum=10;//十个结点 um=14;//14条弧 for(i=0;ivexnum;v++)//浏览所有景点信息 printf(" %-4d %-16s %-56s ",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction); } void ShortestPath_DIJ(MGraph * G)// 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点 { int v,w,i,min,t=0,x,flag=1,v0; int final[20], D[20], p[20][20]; while(flag) { printf("请输入一个起始景点编号:"); scanf("%d",&v0); if(v0<0||v0>G->vexnum) { printf("景点编号不存在!请重新输入景点编号:"); scanf("%d",&v0); } if(v0>=0&&v0vexnum)// flag=0; } for(v=0;vvexnum;v++)//初始化 { final[v]=0;//所有顶点的最短路径还没确定 D[v]=G->arcs[v0][v].adj;//初始时的最短路径是v0到v边的值 for(w=0;wvexnum;w++) p[v][w]=0; if(D[v]vexnum;i++)//寻找下一个确定其最短路径的v { min=INFINITY; //当前所知道的离v0最近的距离 for(w=0;wvexnum;w++)//v应是在S中且到源点最短路径长度最小的顶点 if(!final[w]) if(D[w]vexnum;w++)//出现了通过源点v的最短路径然后又到达w的最短路径 if(!final[w]&&(min+G->arcs[v][w].adjarcs[v][w].adj;//当前最短路径为v的最短路径长度加 的长度 for(x=0;xvexnum;x++) //当前最短路径为v的最短路径长度加 p[w][x]=p[v][x]; p[w][w]=1; } } for(v=0;vvexnum;v++) { if(v0!=v) printf("%s",G->vexs[v0].name); for(w=0;wvexnum;w++) { if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name); t++; } if(t>G->vexnum-1&&v0!=v)printf(" 总路线长%dm ",D[v]); } }//ShortestPath_DIJ end void Floyd(MGraph *G)//出发地和目的地的信息 { int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10]; for(v=0;vvexnum;v++) for(w=0;wvexnum;w++) { D[v][w]=G->arcs[v][w].adj; for(u=0;uvexnum;u++) p[v][w][u]=0; if(D[v][w]vexnum;u++) for(v=0;vvexnum;v++) for(w=0;wvexnum;w++) if(D[v][u]+D[u][w]vexnum;i++) p[v][w][i]=p[v][u][i]||p[u][w][i]; } while(flag) { printf("请输入出发地和目的地的编号:"); scanf("%d%d",&k,&j); if(k<0||k>G->vexnum||j<0||j>G->vexnum) { printf("景点编号不存在!请重新输入出发地和目的地的编号:"); scanf("%d%d",&k,&j); } if(k>=0&&kvexnum&&j>=0&&jvexnum) flag=0; } printf("%s",G->vexs[k].name); for(u=0;uvexnum;u++) if(p[k][j][u]&&k!=u&&j!=u) printf("-->%s",G->vexs[u].name); printf("-->%s",G->vexs[j].name); printf(" 总路线长%dm ",D[k][j]); }//Floyd end void Search(MGraph *G) { int k,flag=1; while(flag) { printf("请输入要查询的景点编号:"); scanf("%d",&k); if(k<0||k>G->vexnum) { printf("景点编号不存在!请重新输入景点编号:"); scanf("%d",&k); } if(k>=0&&kvexnum) flag=0; } printf(" 编号 景点名称 简介 "); printf(" %-4d %-16s %-56s ",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction); }//Search end int LocateVex(MGraph *G,char* v) { int c=-1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) {c=i;break;} return c; } MGraph * CreatUDN(MGraph *G)//初始化图形,接受用户输入 { int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->um); printf("请输入景点的编号:、名称、简介: "); for(i=0;ivexnum;i++) { printf("景点编号:"); scanf("%d",&G->vexs->num); printf("景点名称:"); scanf("%s",G->vexs[i].name); printf("景点简介:"); scanf("%s",G->vexs->introduction); } for(i=0;ivexnum;i++) for(j=0;jvexnum;j++) G->arcs[i][j].adj=INFINITY; printf("请输入路径长度: "); for(k=0;kum;k++) { printf("第%d条边: ",k+1); printf("景点对(x,y):"); scanf("%s",v1); scanf("%s",v2); printf("路径长度:"); scanf("%d",&w); i=LocateVex(G,v1); j=LocateVex(G,v2); if(i>=0&&j>=0) { G->arcs[i][j].adj=w; G->arcs[j][i]=G->arcs[i][j]; } } return G; } void print(MGraph *G) { int v,w,t=0; for(v=0;vvexnum;v++) for(w=0;wvexnum;w++) { if(G->arcs[v][w].adj==INFINITY) printf("∞ "); else printf("%-7d",G->arcs[v][w].adj); t++; if(t%G->vexnum==0) printf(" "); } }

图的遍历是什么

原发布者:zhuang_yy 实验报告一学号:姓名:完成日期:[题目]图的遍历一.问题描述从图中某个顶点出发访问图中所有顶点,且使得每一顶点仅被访问一次,这个过程称为图的遍历。

图的遍历是从图中某个顶点出发,沿着某条搜索路径对图中其余每个顶点进行访问,并且使图中的每个顶点仅被访问一次的过程。

图的遍历是图运算中最重要的运算,也是图的基本运算之一,图的许多运算都是以遍历为基础的。

试编写一个程序,完成对图的遍历。

二.算法设计2.1设计思想1.以邻接矩阵为存储结构,实现无向图的深度优先遍历和广度优先遍历。

2.分别输出每种遍历下的结点访问序列.从图中某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。

它是许多图的算法的基础。

2.1.1图的遍历介绍2.1.2基本概念图的遍历:图中某个顶点出发访问图中所有顶点,且使得每一顶点仅被访问一次,这个过程称为图的遍历。

图的遍历是从图中某个顶点出发,沿着某条搜索路径对图中其余每个顶点进行访问,并且使图中的每个顶点仅被访问一次的过程。

图的遍历是图运算中最重要的运算,也是图的基本运算之一,图的许多运算都是以遍历为基础的。

2..1.3分类按照搜索途径的不同,图的遍历可分为:深度优先遍历(Depth-FirstTraverse)和广度优先遍历(Breadth-FirstTraverse)两大类。

深度优先遍历和广度优先遍历是最为重要的两种遍历图的方法。

(1)深度优先遍历(Depth-FirstTraverse)特点:

怎么用eagraph-cn?

/z/nba/2007/11/23/019487.shtml 看看这个教程吧。

试过可以的。

VirMach:$27.3/月-E3-1240v1/16GB/1TB/10TB/洛杉矶等多机房

上次部落分享过VirMach提供的End of Life Plans系列的VPS主机,最近他们又发布了DEDICATED MIGRATION SPECIALS产品,并提供6.5-7.5折优惠码,优惠后最低每月27.3美元起。同样的这些机器现在订购,将在2021年9月30日至2022年4月30日之间迁移,目前这些等待迁移机器可以在洛杉矶、达拉斯、亚特兰大、纽约、芝加哥等5个地区机房开设,未来迁移的时...

瓜云互联-美国洛杉矶高防CN2高防云服务器,新老用户均可9折促销!低至32.4元/月!

瓜云互联一直主打超高性价比的海外vps产品,主要以美国cn2、香港cn2线路为主,100M以内高宽带,非常适合个人使用、企业等等!安全防护体系 弹性灵活,能为提供简单、 高效、智能、快速、低成本的云防护,帮助个人、企业从实现网络攻击防御,同时也承诺产品24H支持退换,不喜欢可以找客服退现,诚信自由交易!官方网站:点击访问瓜云互联官网活动方案:打折优惠策略:新老用户购买服务器统统9折优惠预存返款活动...

Hostodo:$34.99/年KVM-2.5GB/25G NVMe/8TB/3个数据中心

Hostodo在九月份又发布了两款特别套餐,开设在美国拉斯维加斯、迈阿密和斯波坎机房,基于KVM架构,采用NVMe SSD高性能磁盘,最低1.5GB内存8TB月流量套餐年付34.99美元起。Hostodo是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,美国三个地区机房,支持支付宝或者PayPal、加密货币等付款。下面列出这两款主机配置信息。CP...

graphsearch为你推荐
支出127legraph思科flash绑定ipad支持ipad支持ipad支持ipad重庆宽带测速重庆云阳电信宽带测速网址谁知道,帮个忙?迅雷雷鸟迅雷app没有ios版本的吗?怎么回事routeaddroute add 命令后,本地连接的ipv4默认网关会被自动清除。这个默认网关应该怎么设置?
如何注册域名 北京域名注册 万网域名解析 万网免费域名 重庆服务器托管 flashfxp怎么用 hawkhost优惠码 la域名 合肥鹏博士 蜗牛魔方 web服务器的架设 服务器维护方案 169邮箱 秒杀汇 免费智能解析 重庆双线服务器托管 shopex主机 免费私人服务器 google台湾 空间登入 更多