数据结构-图类型问题

howell711 2003-08-22 10:36:47
这是愚人down的一个图形遍历程序,但是现在需要添加几个内容。
已经有图的建立、深度广度遍历,还需图的销毁、顶点定位、访问顶点、给顶点赋值、找某结点的第一个邻接点、顶点v相对于w的下一个邻接点、图中添加新结点、删除某点、插入一条边、删除一条边,希望以5个结点为例
望高手赐教!!!yuanxianyong711@163.com



/* ======================================== */
/* 图形的遍历 */
/* ======================================== *//*存储队列*/
#include <stdlib.h>
#define MAXQUEUE 70 /* 存储队列的最大容量 */

struct node /* 图形顶点结构宣告 */
{
int vertex; /* 顶点资料 */
struct node *nextnode; /* 指下一顶点的指标 */
};
typedef
struct node *graph; /* 图形的结构新型态 */
struct node head[61]; /* 图形顶点结构数组 */
int visited[61]; /* 遍历记录数组 */

int queue[MAXQUEUE]; /* 存储队列的数组宣告 */
int front = -1; /* 存储队列的前端 */
int rear = -1; /* 存储队列的后端 */

/* ---------------------------------------- */
/* 建立图形 */
/* ---------------------------------------- */
void creategraph(int *node,int num)
{
graph newnode; /* 新顶点指标 */
graph ptr;
int from; /* 边线的起点 */
int to; /* 边线的终点 */
int i;

for ( i = 0; i < num; i++ ) /* 读取边线的回路 */
{
from = node[i*2]; /* 边线的起点 */
to = node[i*2+1]; /* 边线的终点 */
/* 建立新顶点记忆体 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 建立顶点内容 */
newnode->nextnode = NULL; /* 设定指标初值 */
ptr = &(head[from]); /* 顶点位置 */
while ( ptr->nextnode != NULL ) /* 遍历至链表尾 */
ptr = ptr->nextnode; /* 下一个顶点 */
ptr->nextnode = newnode; /* 插入结尾 */
}
}

/* ---------------------------------------- */
/* 存储队列资料的存入 */
/* ---------------------------------------- */
int enqueue(int value)
{
if ( rear >= MAXQUEUE ) /* 检查存储队列是否全满 */
return -1; /* 无法存入 */
rear++; /* 后端指标往前移 */
queue[rear] = value; /* 存入存储队列 */
}
/* ---------------------------------------- */
/* 存储队列资料的取出 */
/* ---------------------------------------- */
int dequeue()
{
if ( front == rear ) /* 检查存储队列是否是空 */
return -1; /* 无法取出 */
front++; /* 前端指标往前移 */
return queue[front]; /* 存储队列取出 */
}

/* ---------------------------------------- */
/* 图形的广度优先搜寻法 */
/* ---------------------------------------- */
void bfs(int current)
{
graph ptr;

/* 处理第一个顶点 */
enqueue(current); /* 将顶点存入存储队列 */
visited[current] = 1; /* 记录已遍历过 */
printf("[%d] ",current); /* 印出遍历顶点值 */
while ( front != rear ) /* 存储队列是否是空的 */
{
current = dequeue(); /* 将顶点从伫列取出 */
ptr = head[current].nextnode; /* 顶点位置 */
while ( ptr != NULL ) /* 遍历至链表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如过没遍历过 */
{
enqueue(ptr->vertex); /* 递回遍历呼叫 */
visited[ptr->vertex] = 1; /* 记录已遍历过 */
/* 印出遍历顶点值 */
printf("[%d] ",ptr->vertex);
}
ptr = ptr->nextnode; /* 下一个顶点 */
}
}
}
/* ---------------------------------------- */
/* 图形的深度优先搜寻法 */
/* ---------------------------------------- */
void dfs(int current)
{
graph ptr;

visited[current] = 1; /* 记录已遍历过 */
printf("[%d] ",current); /* 印出遍历顶点值 */
ptr = head[current].nextnode; /* 顶点位置 */
while ( ptr != NULL ) /* 遍历至链表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如过没遍历过 */
dfs(ptr->vertex); /* 递回遍历呼叫 */
ptr = ptr->nextnode; /* 下一个顶点 */
}
}
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oopig 2003-08-23
  • 打赏
  • 举报
回复
自己琢磨,实在不懂了再问,这样子进步会快很多。
lybapple 2003-08-22
  • 打赏
  • 举报
回复
还是自己慢慢琢磨吧,
那样对自己有很大的提高。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧