设为首页 加入收藏

TOP

纯C语言:检索与周游广度深度遍历源码
2014-11-23 20:25:07 来源: 作者: 【 】 浏览:9
Tags:语言 检索 周游 广度 深度 源码
#include 
  
   
typedef  int  datatype;   /*假定线性表元素的类型为整型*/
#define  maxsize  1024    /*假定线性表的最大长度为1024*/
# define n 100            /* 图的顶点最大个数 */
typedef char VEXTYPE;  /* 顶点的数据类型 */
typedef float ADJTYPE;  /* 权值类型 */
typedef struct
{ 
	VEXTYPE vexs[n] ;  /* 顶点信息数组 */
    ADJTYPE arcs[n][n] ; /* 边权数组 */
    int num ;    /* 顶点的实际个数 */
}GRAPH;

/***********************1。置空图**********************/
void GraphInit(GRAPH  *L)
{
 L->num=0;
}

/***********************2。求结点数**********************/
int GraphVexs(GRAPH  *L)
{
 return(L->num);
}

/***********************3。创建图**********************/
void GraphCreate(GRAPH  *L)
{
 int i,j;
 GraphInit(L);
 printf("请输入顶点数目:");
 scanf("%d",&L->num);
 printf("请输入各顶点的信息(单个符号):");
 for(i=0;i
   
    num;i++) { fflush(stdin); scanf("%c",&L->vexs[i]); } printf("请输入边权矩阵的信息:"); for(i=0;i
    
     num;i++) { for(j=0;j
     
      num;j++) { scanf("%f",&L->arcs[i][j]); } } printf("图已经创建完毕!"); } /***********************4。图的输出**********************/ void GraphOut(GRAPH L) { int i,j; printf("\n图的顶点数目为:%d",L.num); printf("\n图的各顶点的信息为:\n"); for(i=0;i
      
       front=0; sq->rear=0; } /*****************************************************************************/ int QueueIsEmpty(SEQQUEUE sq) //如果顺序循环队列sq为空,成功返回1,否则返回0 { if (sq.rear==sq.front) return(1); else return(0); } /*****************************************************************************/ int QueueFront(SEQQUEUE sq,DATATYPE *e) //将顺序循环队列sq的队头元素保存到e所指地址,成功返回1,失败返回0 { if (QueueIsEmpty(sq)) { printf("queue is empty!\n");return 0;} else { *e=sq.data[(sq.front)]; return 1;} } /*****************************************************************************/ int QueueIn (SEQQUEUE *sq,DATATYPE x) //将元素x入队列sq的队尾,成功返回1,失败返回0 { if (sq->front==(sq->rear+1)%maxsize) { printf("queue is full!\n"); return 0; } else { sq->data[sq->rear]=x; sq->rear=(sq->rear+1)%maxsize; return(1); } } /*****************************************************************************/ int QueueOut(SEQQUEUE *sq) //将队列sq队首元素出队列,成功返回1,失败返回0 { if (QueueIsEmpty(*sq)) { printf("queue is empty!\n"); return 0; } else { sq->front=(sq->front+1)%maxsize; return 1; } } /***********************7。图的广度周游**********************/ void BFS(GRAPH g,int v,int mark[]) //从v出发广度优先周游图g中能访问的各个顶点 { int v1,v2; SEQQUEUE q; QueueInit(&q); QueueIn(&q,v); mark[v]=1; printf("%c ",g.vexs[v]); while(QueueIsEmpty(q)==0) { QueueFront(q,&v1); QueueOut(&q); for(v2=0;v2
       
        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇纯C语言INI文件解析 下一篇纯C语言:检索与周游加减乘除24源..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: