数据结构-图的邻接表表示(C语言)

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 04:45:50

数据结构-图的邻接表表示(C语言)
数据结构-图的邻接表表示(C语言)

数据结构-图的邻接表表示(C语言)

// grap_theory.cpp : 定义控制台应用程序的入口点.

//


//#include "stdafx.h" //VS2010头文件

#include<stdio.h>

#define NTOTAL (26*4) //最大路径数目

#define MAX_DISTANCE  10000.0

struct piont{

int line_adjacency_list;

int num_piont;

int test_num[2];

char from[NTOTAL];

char to[NTOTAL];

char all_piont[NTOTAL];

int  all_piont_num[NTOTAL];

float distance[NTOTAL];

float distance_all[NTOTAL][NTOTAL];

};//结构体定义

void read(piont *test){

int i;

char temp[100];

scanf("%d",&test->line_adjacency_list);//读取行数

gets(temp);//读取回车字符

for(i=0;i<test->line_adjacency_list;i++){//读取列表

scanf("%c %c %f",&test->from[i],&test->to[i],&test->distance[i]);

gets(temp);//读取回车字符

}

scanf("%c %c",&test->from[i],&test->to[i]);//读取短短路径名称

}

void cal_num_piont(piont *test){

int i,j;

int from_num,to_num;

test->num_piont=0;

for(i=0;i<NTOTAL;i++){

test->all_piont_num[i]=0;//点的度数清零

test->distance_all[i][i]=0.0;

for(j=i+1;j<NTOTAL;j++){

test->distance_all[i][j]=MAX_DISTANCE;

test->distance_all[j][i]=MAX_DISTANCE;

}

}

for(i=0;i<test->line_adjacency_list;i++){

//判断from

for(j=0;j<test->num_piont;j++){

if(test->from[i]==test->all_piont[j]){

from_num=j;

test->all_piont_num[j]++;

break;

}

}

if(j==test->num_piont){

test->all_piont[j]=test->from[i];

from_num=j;

test->all_piont_num[j]++;

test->num_piont++;

}

//判断end

for(j=0;j<test->num_piont;j++){

if(test->to[i]==test->all_piont[j]){

to_num=j;

test->all_piont_num[j]++;

break;

}

}

if(j==test->num_piont){

test->all_piont[j]=test->to[i];

to_num=j;

test->all_piont_num[j]++;

test->num_piont++;


}

test->distance_all[from_num][to_num]=test->distance[i];

test->distance_all[to_num][from_num]=test->distance[i];

}

//判断所求点的位置

for(i=0;i<test->num_piont;i++){

if(test->from[test->line_adjacency_list]==test->all_piont[i])

test->test_num[0]=i;

if(test->to[test->line_adjacency_list]==test->all_piont[i])

test->test_num[1]=i;

}

}

float min_distance(piont *test){

int i,j,k,n;

float min_dis;

float dis_i_k_add_k_j;

n=test->num_piont;

//Floyd-Warshall算法

for(k=0;k<n;k++){

for(i=0;i<n;i++){

for(j=0;j<n;j++){

dis_i_k_add_k_j=(test->distance_all[i][k]+test->distance_all[k][j]);

if(test->distance_all[i][j]>dis_i_k_add_k_j)

test->distance_all[i][j]=dis_i_k_add_k_j;

}

}

}

min_dis=test->distance_all[test->test_num[0]][test->test_num[1]]; 

return min_dis;

}

void test_printf(piont *test,float min_dis){

int i;

printf("%d\n",test->num_piont);

for(i=0;i<test->num_piont;i++){

printf("%d\n",test->all_piont_num[i]);

}

printf("%-8.0f\n",min_dis);

}

void main()

{

float min_dis;

piont test1;//结构体声明

read(&test1);

cal_num_piont(&test1);

min_dis=min_distance(&test1);

test_printf(&test1,min_dis);


}



数据结构-图的邻接表表示(C语言) 用邻接表表示的图进行广度优先遍历时,通常是采用()来实现算法的.A 栈 B队列 C图 D树 关于图的邻接表表示法的C语言描述在看书上的例子.定义头结点这一步书上是这样的:struct vex{char data;struct vex *firstarc;←}我想问的是箭头标出来的那句,为什么是用vex呢,vex就意味着指针指向 用邻接表表示n个顶点e条边的无向图,其边表结点的总数是什么?A.n×e B.e C.2e D. 假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是_____为什么是o(n+e)? 1.用邻接表表示图 广度优先搜索 通常采用什么实现算法 a 栈 b 队列 c 树 d图2.用邻接表表示图 深度优先搜索 通常采用什么实现算法a 栈 b 队列 c 树 d图 C语言的作业,求大神帮忙实验名称:图的建立 实验目的:熟悉图的存储方法,学会建立图 实验内容:1.用邻接矩阵表示法来建立图 2.用邻接表表示法来建立图 图的邻接矩阵表示法:1、实际 数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示 《数据结构》以邻接表位存储,写出连通图的深度优先搜索法. 在数据结构中,对于有向图,弧尾算弧头的邻接点吗? 数据结构C语言括号的检验源程序 29. 假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是_____ 设连通无向图G采用邻接表表示.写出求最小生成树Prim算法的实现代码.来个具体的例子看看,坐等,来人啊. 图改用邻接表表示,重写Dijkstra算法.输入任意带权有向图,输出每一对顶点间的最短路径及其权值.用C++编写程序 关于数据结构中图的概念请问 在数据结构中图的一章中 什么是表头向量和边结点?它的原题是:对于一个具有n个顶点e条边的无向图的邻接表的表示,那么表头向量大小是(),邻接表的边结点 求java大神!下面是一个用java表示图的程序(邻接表表示法);在运行的时候提示NullPointerException.程序如下package graph;class Link{public int idata;public double ddata;public Link next;//.public Link(int id,double dd){ 数据结构中马踏棋盘问题,求c程序考虑使用无向图来表示格子间的关系,以邻接表作为该无向图中结点与相邻8个结点的存储结构 C语言 将邻接矩阵转换为邻接表有向图