标题:图的深度搜索问题!
只看楼主
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
 问题点数:0 回复次数:9 
图的深度搜索问题!

我要去跳楼,我是没办法了,谁会看看,下面的程序,按深度优先搜索打印不了完整的图:

#include <stdio.h>
#include <stdlib.h>
#define N 20

typedef struct arc
{
int index; /* 弧头结点在图数组中的序号 */
struct arc *nextarc;
}*Arc;

typedef struct
{
int info; /* 顶点的信息 */
Arc firstarc; /* 每个顶点的第一条边 */
}Graph;

static void CreateGraph(Graph g[]); /* 创建图 */
static int LocateNode(Graph g[], int v, int n); /* 查找顶点在图数组中的序号 */
static void PrintGraph(Graph g[], int n); /* 打印图 */
static void DepthFirstSearch(Graph g[], int i, int temp[]); /* 深度优先搜索 */
static void OutputGraph(Graph g[], int n);

int main(void)
{
Graph g[N];

CreateGraph(g);

return 0;
}

static void CreateGraph(Graph g[])
{
int i, j, k, n, e, v1, v2; /* n, e 分别代表顶点的数量和边的数量 */
Arc p, q;

printf("Enter n and e: ");
scanf("%d %d", &n, &e); /* 读取顶点的数量和边的数量 */

printf("Enter every node information: ");
for (k = 0; k < n; k++)
{
scanf("%d", &g[k].info); /* 读取每个顶点的信息 */
g[k].firstarc = NULL; /* 初始化每个顶点的头指针 */
}

printf("Enter every edge: \n");
for (k = 0; k < e; k++)
{
scanf("%d %d", &v1, &v2); /* 读取组成每条边的两个顶点 */

i = LocateNode(g, v1, n);
j = LocateNode(g, v2, n); /* 查找这两个顶点在图数组中的序号 */

if ((p = (Arc)malloc(sizeof(struct arc))) == NULL)
{
exit(1);
}
p -> index = j; /* 指向弧头结点在数组中的序号 */
p -> nextarc = g[i].firstarc; /* 指向弧尾 */
g[i].firstarc = p;

if ((q = (Arc)malloc(sizeof(struct arc))) == NULL)
{
exit(1);
}
q -> index = i;
q -> nextarc = g[j].firstarc;
g[j].firstarc = q;
}

OutputGraph(g, n);

PrintGraph(g, n); /* 打印图,按深度优先搜索 */
}

static int LocateNode(Graph g[], int v, int n)
{
int i;

for (i = 0; i < n; i++)
{
if (g[i].info == v)
{
return i;
}
}
}

static void OutputGraph(Graph g[], int n) /* 按顶点在数组中的顺序打印图 */
{
int i;
Arc p;

for (i = 0; i < n; i++)
{
printf("info = %d: arc", g[i].info);
p = g[i].firstarc;
while (p)
{
printf("-> %d", p -> index);
p = p -> nextarc;
}
putchar('\n');
}
}

static void PrintGraph(Graph g[], int n) /* 主要就是下面两个函数 */
{
int temp[N], i;

for (i = 0; i < n; i++)
{
temp[i] = 0; /* 初始化辅助数组 */
}

printf("The Depth First Search Order: ");
for (i = 0; i < n; i++)
{
if (temp[i] == 0)
{
DepthFirstSearch(g, i, temp); /* i 代表下标 */
}
}
putchar('\n');
}

static void DepthFirstSearch(Graph g[], int i, int temp[])
{
int k;
Arc p;

temp[i] = 1; /* 以访问过设置成 1 */

printf("%d ", g[i].info); /* 打印顶点信息 */

p = g[i].firstarc; /* p 指向当前顶点链表的头结点 */
k = p -> index;

while (p)
{
if (temp[k] == 0)
{
DepthFirstSearch(g, k, temp);
}

p = p -> nextarc;
k = p -> index;
}
}

下面是输入输出数据:
Enter n and e: 8 10
Enter every node information: 1 2 3 4 5 6 7 8
Enter every edge:
1 2
1 3
2 4
2 5
3 6
3 7
4 8
5 8
6 8
7 8
info = 1: arc-> 2-> 1
info = 2: arc-> 4-> 3-> 0
info = 3: arc-> 6-> 5-> 0
info = 4: arc-> 7-> 1
info = 5: arc-> 7-> 1
info = 6: arc-> 7-> 2
info = 7: arc-> 7-> 2
info = 8: arc-> 6-> 5-> 4-> 3
The Depth First Search Order: 1 3 7 8 6 Press any key to continue...


贴子别给我转走,你要敢转到数据结构,我....



搜索更多相关主题的帖子: 深度 搜索 Graph struct Arc 
2006-05-29 16:42
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

不懂,数据结构刚看到线性表和广义表,连树都没到,更别说图了.哎!


对不礼貌的女生收钱......
2006-05-29 16:46
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
得分:0 
以下是引用论坛在2006-5-29 16:42:00的发言:
贴子别给我转走,你要敢转到数据结构,我....

嘿嘿,为什么不在数据结构问那?


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-29 16:50
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
倒,那里能解决吗,那里人少,不好解决

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-29 16:53
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 

这种题.书上都有例题.照书抄!!!


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-29 20:21
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
倒,你看老严书上有了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-29 20:56
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 

那你不会换本书...这种题遍地都是..


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-29 21:36
mechanics
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-16
得分:0 
书上多的是

2006-05-30 00:31
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
没创意的东西呀~

淘宝杜琨
2006-05-30 00:58
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
得分:0 
以下是引用论坛在2006-5-29 16:53:00的发言:
倒,那里能解决吗,那里人少,不好解决

哎, 斑竹都赖在这里了, 人能不少么
你的那问题,数据结构版面以前就有人发过,最近菜鸟上路也发过,自己去翻旧贴


我的征途是星辰大海
2006-05-30 08:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-68301-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.889761 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved