资源简介
这是一个图的深度优先搜索遍历的C代码的具体实现,详细情况请参见 压缩包中的“说明.txt”
代码片段和文件信息
// graph.cpp : Defines the entry point for the console application.
// 此程序参考《软件技术基础》深度优先搜索遍历算法,图1.41,并将其实现
#include “stdafx.h“
#include “stdio.h“
#include “graph.h“
#include “malloc.h“
int _tmain(int argc _TCHAR* argv[])
{
start(); /*进入应用程序*/
printf(“\n run OK.......\n“);
while(1);
return 0;
}
void start()
{
/*initMatrix(vexMatrixMAXNODE);*/
initHeadNode(); /*初始化头节点*/
//showMatrix(MAXNODE);
formlink(); /* 根据邻接矩阵形成邻接表*/
debug(2); //
}
void zeroMatrix(int matrix[][MAXNODE] int nodeNum)
{
int ij;
for(i=0;i for(j=0;j {
matrix[i][j] = 0;
}
}
void initHeadNode()
{
int i;
for(i=0;i {
vexlist[i].vexdata = i;
vexlist[i].firstarc = NULL;
}
}
void debug(int seq)
{
if(seq == 1)
showMatrix(MAXNODE);
if(seq == 2)
depthlookThough(vexlist0); //从顶点v0开始遍历
}
void showMatrix(int leng)
{
int ij;
for(i=0;i {
for(j=0;j printf(“ %d “vexMatrix[i][j]);
printf(“\n“);
}
}
struct nodetype *node_alloc(int nbvex int arcdata)
{
struct nodetype * pnode=NULL;
pnode = (struct nodetype *)malloc(sizeof(struct nodetype));
if(pnode == NULL)
{
printf(“malloc err \n“);
return NULL;
}
pnode->nbnode = nbvex;
pnode->arcdata = arcdata;
pnode->next = NULL;
return pnode;
}
void formlink() //从矩阵形成邻接表
{
int ij;
struct nodetype * pnode1 = NULL;
struct nodetype * temp1;
for(i=0;i {
for(j=0;j {
if(vexMatrix[i][j] == 1) /* 找到邻接点*/
{
pnode1 = node_alloc(j1);
if(pnode1 == NULL)
return;
if(vexlist[i].firstarc == NULL)
{
vexlist[i].firstarc = pnode1; // 添加i的第一个邻接点
}
else //添加到vi的链表中去
{
temp1 = vexlist[i].firstarc;
while(temp1->next != NULL)
temp1 = temp1->next;
temp1->next = pnode1;
}
}
}
}
}
int visited[MAXNODE] = {0}; /* 顶点是否已经访问过*/
//根据邻接表开始深度优先搜索遍历
void depthlookThough(headtype list[]int v0)
{
int w;
visited[v0] = 1;
printf(“ %d \n“ v0);
w = first_vex(vexlistv0);
while(w != -1)
{
if(visited[w] == 0)
depthlookThough(vexlistw);
w = next_vex(vexlist v0w);
}
}
int first_vex(headtype list[]int v0) //找到v0的第一个未访问过的邻接点
{
struct nodetype * pnode = NULL;
if(vexlist[v0].firstarc == NULL)
{
printf(“no first node \n “);
return -1;
}
pnode = vexlist[v0].firstarc;
while(pnode->next != NULL)
{
if(visited[pnode->nbnode] == 1)
pnode = pnode->next;
else
return pnode->nbnode;
}
if(visited[pnode->nbnode] == 0)
return pnode->nbnode;
else
return -1;
}
int next_vex(headtype list[] int v0 int vi) //查找v0节点的下一个邻接点
{
struct nodetype * pnode = NULL;
if(vexlist[v0].firstarc == NULL)
return -1;
pnode = vexlist[v0].firstarc;
while(pnode->next != NULL)
{
if(pnode->nbnode != vi)
pnode = pnode->next;
else
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 40960 2008-04-15 05:44 graph\debug\graph.exe
文件 302808 2008-04-15 05:44 graph\debug\graph.ilk
文件 347136 2008-04-15 05:44 graph\debug\graph.pdb
文件 10032 2008-04-15 05:44 graph\graph\Debug\BuildLog.htm
文件 403 2008-04-15 05:44 graph\graph\Debug\graph.exe.em
文件 468 2008-04-15 05:44 graph\graph\Debug\graph.exe.em
文件 385 2008-04-15 05:44 graph\graph\Debug\graph.exe.intermediate.manifest
文件 13291 2008-04-15 05:43 graph\graph\Debug\graph.obj
文件 1048576 2008-04-15 05:43 graph\graph\Debug\graph.pch
文件 69 2008-04-15 05:44 graph\graph\Debug\mt.dep
文件 10525 2008-04-15 05:43 graph\graph\Debug\stdafx.obj
文件 60416 2008-04-15 05:43 graph\graph\Debug\vc80.idb
文件 110592 2008-04-15 05:43 graph\graph\Debug\vc80.pdb
文件 3194 2008-04-15 05:43 graph\graph\graph.cpp
文件 864 2008-04-15 05:41 graph\graph\graph.h
文件 4670 2008-04-14 23:39 graph\graph\graph.vcproj
文件 1427 2008-04-15 05:44 graph\graph\graph.vcproj.D7FF173F3216472.Administrator.user
文件 1294 2008-04-14 23:36 graph\graph\ReadMe.txt
文件 292 2008-04-14 23:36 graph\graph\stdafx.cpp
文件 376 2008-04-14 23:36 graph\graph\stdafx.h
文件 535552 2008-04-15 05:44 graph\graph.ncb
文件 885 2008-04-14 23:36 graph\graph.sln
..A..H. 9216 2008-04-15 05:44 graph\graph.suo
文件 467 2008-04-15 05:46 说明.txt
目录 0 2008-04-15 05:44 graph\graph\Debug
目录 0 2008-04-15 05:44 graph\debug
目录 0 2008-04-15 05:43 graph\graph
目录 0 2008-04-15 05:19 graph
----------- --------- ---------- ----- ----
2503898 28
............此处省略1个文件信息
- 上一篇:51单片机控制双舵机模拟云台
- 下一篇:PIX 密码恢复np63.bin
相关资源
- R实现汇率展示-小function
- 会员管理系统之用户登陆和会员管理
- 自定义AutoTextView实现公告栏 3D 翻转动
- 拔河游戏机的逻辑电路设计和实现
- Nginx + Websocket 实现推送
- ROI Proposal实现过程总结
- 简单CPU verilog实现
- 使用ajax实现电子商务网站中的购物车
- 用VHDL语言编写的EDA设计程序实现7人表
- cocos2d-x2.0 射击游戏实现 沈大海cocos
- labview实现电压采集
- 实现音乐推荐系统源代码
- ECC加密算法实现C源码
- 对GUI实现自动化 测试的工具
- 51单片机实现蜂鸣器警车、救护车、消
- 狄杰斯特拉最短路径算法实现
- 基于DSP温度采集系统的设计与实现
- IIR数字滤波器的verilog实现
- https VC实现的源代码
- 利用FSVM实现对手写数字的识别
- 支持向量机SVM多分类算法实现
- ARM汇编实现矩阵转置
- 使用Qt实现网页自动刷新工具 demo
- 批处理实现自动修改mac代码夹测试工
- 国密SM4算法Verilog实现
- SSM+Ajax+maven+拦截器实现登录功能
- 基于VC_的OpenGL三维动画仿真及场景漫
- 编写程序mycat.c,实现文件内容的显示
- Spring boot实现用户登录,转盘,并将获
- Qt实现Linux任务管理器SysMonitor.zip
评论
共有 条评论