找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 524|回复: 1

[分享]缔结特斯拉算法

[复制链接]
发表于 2009-11-2 04:24:30 | 显示全部楼层 |阅读模式 IP:江苏扬州
#include <iostream.h>
#include <cstring>
#include <stdlib.h>
#include<stdio.h>
#include <conio.h>
#include <ctype.h>
#define MAXVTXNUM 20 //图中顶点数的最大值
#define MAXSIZE 1000
#define MAX 30
#ifndef x
#define x 1
typedef struct
{
char *name; //该顶点的名称
char *info; //景点信息
}VertexType; //顶点类型
#endif
#ifndef xx
#define xx 1
typedef struct
{
int lengh; //边的权值
int ivex,jvex; //边两端的顶点号
}EdgeType; // 变的类型
#endif
#ifndef xxx
#define xxx 1
typedef struct EdgeNode
{
EdgeType elem;
EdgeNode *ilink,*jlink;
}EdgeNode, *EdgePtr; //边的结点类型
#endif
#ifndef xxxx
#define xxxx 1
typedef struct
{
VertexType data;
EdgePtr firstEdge; //指向第一条依附于该顶点的边的指针类型
}VNode; //顶点类型
#endif
#ifndef xxxxx
#define xxxxx 2
typedef struct
{
VNode Adjmulist[MAXVTXNUM]; //邻接多重表
int vexNum, edgeNum; //图中的顶点数和边数
}GraphType; //图的类型
#endif
#ifndef xxxxxx
#define xxxxxx 3
typedef struct
{
int vx, vy;
}Edge;
typedef struct
{
Edge edges[MAXVTXNUM]; //路径中边的序列
int len; //路径中边的数目
}PathType;
#endif
#ifndef xxxxxxx
#define xxxxxxx 4
typedef struct
{
char *Vertices[MAXSIZE]; //路径中景点的序列
int num;
}PType;
#endif
void InitGraph(GraphType &g); //初始化邻接多重表,表示一个空图
//在途中查找其景点名和uname相同的顶点。若存在,则以i返回其在临界多重表中的位置并返回TURE;
bool LocateVex(GraphType &g, char *uname, int &i);
void GetVex(GraphType g, int i, VertexType &v);
EdgePtr FirstEdge(GraphType g, int vi);
void NextEdge(GraphType g, int vi, EdgePtr p, int &vj, EdgePtr &q);
void InsertVex(GraphType &g, VertexType v);
void InsertEdge(GraphType &g, EdgeType e);
void DeleteVex(GraphType &g, VertexType v);
void DeleteEdge(GraphType &g, EdgeType e);
void InitPath(PathType &pa); //初始化pa为一条空路径
void CopyPath(PathType &p1, PathType &p2); //复制路径p1=p2
void InsertPath(PathType &pa, int v, int w); //在路径pa中插入一条边(v,w)
int PathLength(PathType pa); //返回路径pa的长度
void OutPath(GraphType g, PathType pa, PType &vtxes); //将路径转化为景点的名序列
void Initialization();
void ReadCommand(char &cmd);
void Interpret(char cmd);
void CreatGraph(GraphType &g, FILE *f);
void GetShortestPath(GraphType g, char *sname, char *tname,
int &pathLength, PType &PathInfo);
void ShortestPath(GraphType g, int st, int nd,
int &pathLength, PType &PathInfo);
//#include<string>
/////////////////////////////////////////////////////////////
////////////////////// 图设计部分 ///////////////////////
/////////////////////////////////////////////////////////////
void InitGraph(GraphType &g)
{
g.vexNum = g.edgeNum = 0;
}//InitGraph
bool LocateVex(GraphType &g, char *uname, int &i)
{
for(i=0; i<g.vexNum; i++)
if(!strcmp(uname, g.Adjmulist[i].data.name))
{
return true;
break;
}
return false;
}//LocateVex
EdgePtr FirstEdge(GraphType g, int vi)
{//返回图g中指向依附于顶点vi的第一条边的指针g.Adjmulist[i].data
return
g.Adjmulist[vi].firstEdge;
}//FirstEdge
void GetVex(GraphType g, int i, VertexType &v)
{
if(i<0)
cout<<"这两点间无路径可通!"<<endl;
else
v = g.Adjmulist[i].data;
}//GetVex
void NextEdge(GraphType g, int vi, EdgePtr p, int &vj, EdgePtr &q)
{
if(p->elem.ivex==vi )
{
q = p->ilink;
vj = p->elem.jvex;
}
else
{
q = p->jlink;
vj = p->elem.ivex;
}
}//NextEdge
void InsertEdge(GraphType &g, EdgeType e)
{

EdgePtr p;
p = (EdgePtr)malloc(sizeof(EdgeNode));
p->elem =e;
p->ilink = FirstEdge(g,e.ivex);
p->jlink = FirstEdge(g, e.jvex);
g.Adjmulist[e.ivex].firstEdge = g.Adjmulist[e.jvex].firstEdge = p;
}//InsertEdge
void InsertVex(GraphType &g, VertexType v, int i)
{
//在图g的邻接多重表中添加一个顶点v
g.Adjmulist[i].data.name = new char[MAXSIZE];
g.Adjmulist[i].data.info = new char[MAXSIZE];
strcpy(g.Adjmulist[i].data.name,v.name);
strcpy(g.Adjmulist[i].data.info,v.info);
g.Adjmulist[i].firstEdge = NULL;
}
///////////////////////////////////////////////////////////////////////
///////////////////////// 路径类型 ////////////////////////////////
///////////////////////////////////////////////////////////////////////
void InitPath(PathType &pa)
{
pa.len = 0;
}//InitPath
int PathLengh(PathType pa)
{
return pa.len;
}//PathLengh
void CopyPath(PathType &p1, PathType &p2)
{
//复制路径p1=p2
for(int i =0; i<p2.len; i++)
{
p1.edges[i].vx = p2.edges[i].vx;
p1.edges[i].vy = p2.edges[i].vy;
}
p1.len = p2.len;
}//CopyPath
void InsertPath(PathType &pa, int v, int w)
{
//在路pa径中插入一条边(v,w)
pa.edges[pa.len].vx = v;
pa.edges[pa.len].vy = w;
pa.len++;
}//InsertPath
void OutPath(GraphType g, PathType pa, PType &vtxes)
{
//将路径转化为景点的名序列
int m = 0;
VertexType vtx;
vtx.info = new char[MAXSIZE];
vtx.name = new char[MAXSIZE];
for(int i=0; i<pa.len; i+
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:34 , Processed in 0.208914 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表