其中数据文件格式为:
标示行 1:Graph。表示这是一个图的数据文件。
表示行 2:UDG,UDN,DG 或 DN。这一行用来标识此图的无向图,无向网,有向图,还
是有向网。
顶点行:这一行将图中所有顶点列出,顶点之间用空格进行分割。
边数据行:一条边一行,边的两个顶点之间用空格分割。
函数中的数据:
FILE* pFile; //定义顺序表的文件指针
char str[1000]; //存放读出一行文本的字符串
char strTemp[10]; //判断是否注释行
VerNode *u,*arc,*row,*col;//用于遍历图的顶点
VerNode *R //尾指针
int i=0,j=0,nR=0,nC=0; //用于循环计数;
int edgeNum=0; //边的数量
eInfoType eWeight; //边的信息,常为边的权值
GraphKind graphType; //图类型枚举变量
int nRow=1; //矩阵行下标
int nCol=1; //矩阵列下标
EdgeNode* eR; //边链表尾指针
EdgeNode* p;
elementType Nf,Ns; //边或弧的 2 个相邻顶点
主要算法思想:首先要读取和识别图的类型,接着读取顶点数据,并创建顶点链表,实
际上,建立顶点链表有两种方法,一种头插法,一种为尾插法,头插法是每次讲新插入
的结点插入在链表的表头,而尾插法是将插入的结点插入在链表的表尾。本次实验为了
之后顶点的遍历和验证,使用尾插法建立顶点链表的算法设计思想,最后循环读取边数
据行,Nf 储存边的第一个顶点,NS 储存第二个顶点,遍历顶点链表,找到与 Nf 相等
的顶点,找到与 Ns 相等的顶点同时计数,以计量出来的数为顶点编号利用尾插法创建
边链表。
建立顶点链表的过程:
char* token=strtok(str," ");
int nNum=1;
G.VerList=new VerNode;
G.VerList->data=*token;
G.VerList->nextdata=NULL;
G.VerList->firstEdge=NULL;
R=G.VerList;
token=strtok( NULL," ");
while(token!=NULL)
{
arc=new VerNode;
arc->data=*token;
arc->nextdata=NULL;
arc->firstEdge=NULL;
R->nextdata=arc;
评论0
最新资源