c语言图的建立

c语言中如何创建一幅图,同时将数据输入到图中

结构体

sturct Shortway{

char *beigin;

char *end;

int distance;

};

c语言图的邻接表建立,建立应该怎么写,说一下具体的思路就行,不要给代码

在读入顶点信息的时候,将每个点的第一条置为空。如node[x].first_edge = NULL

读入每条边的时候,边的信息应该包括这条边所连接的两个点,即为ilink和jlink。然后执行

edge = malloc…

edge-next_edge = node[ilink].first_edge;

node[ilink].first_edge = edge;

即,将ilink的第一条边指向刚刚输入的这条边,而该边的下一条边置为原本ilink的第一条边。

重复这一过程,直至读完所有边的信息。

c语言图的建立

C语言关于图的邻接表建立

#include “iostream.h”

const int Max_vertex=5;

const int Max_Edge=8;

int visited[Max_vertex+1]; //访问标志数组

struct ArcNode

{

int adjvex;

ArcNode *nextarc; //指向下一条弧

};

struct Vnode

{

int v; //顶点信息

ArcNode *next;

}a[Max_vertex+1];

/* 无向图的建立 */

void creategraph()

{

int i,j,k;

ArcNode *s;

//初始化

for(i=1;i=Max_vertex;i++)

{

a[i].v=i;

a[i].next=NULL;

}

/*以头插法建立 */

for(k=1;k=Max_Edge;k++)

{

cout”请输入第”k”条边:”;

cinij;

if(i9||i0||j0||j9)

{

cout”输入错误!!\n”endl;

break;

}

else{

coutendl;

s=new ArcNode;

s-adjvex=j;

s-nextarc=a[i].next;

a[i].next=s;

s=new ArcNode;

s-adjvex=i;

s-nextarc=a[j].next;

a[j].next=s;

}

}

}

void display()

{

ArcNode *p;

cout”你建立的图为:”endl;

for(int i=1;i=Max_vertex;i++)

{

p=a[i].next;

couta[i].v”-“;

while(p-nextarc!=NULL)

{

coutp-adjvex”-“;

p=p-nextarc;

}

coutp-adjvexendl;

}

}

void main()

{

cout”/******\t本算法以关插法建立无向图的邻接表为例!\t******/”endl;

char yn=’y’;int k;

creategraph();

display();

}

c语言图的遍历,邻接表存储,深度,广度优先遍历

(1)图的建立,按采用邻接表作为存储结构。

(2)从指定顶点出发进行深度优先搜索遍历。

(3)从指定顶点出发进行广度优先搜索遍历。

#include”stdio.h”

#include”string.h”

#include”stdlib.h”

#include”math.h”

#define MAX_INT 1000

#define MAX_VERTEX_NUM 20

#define MAX_QUEUE_NUMBER 20

typedef struct ArcNode

{

int adjvex;

double adj;

struct ArcNode *nextarc;

}ArcNode;

typedef struct VexNode

{

char szName[40];

ArcNode *firstarc;

}VexNode,AdjList[MAX_VERTEX_NUM];

typedef struct

{

AdjList vexs;

int vexnum,arcnum;

}Net;

//定义队列

typedef struct{

int *elem;

int front, rear;

}Queue;

void InitQueue(Queue Q)

{

Q.elem = new int[MAX_QUEUE_NUMBER];

Q.front = Q.rear = 0;

}

int EmptyQueue(Queue Q)

{

if(Q.front==Q.rear)

return 0;

else

return 1;

}

void DestroyQueue(Queue Q){

delete []Q.elem;

Q.front = Q.rear = 0;

}

void EnterQueue(Queue Q, int e)

{

if((Q.rear + 1)%MAX_QUEUE_NUMBER != Q.front)

Q.elem[Q.rear ]= e;

else

printf(“队列满!\n”);

Q.rear = (Q.rear + 1)%MAX_QUEUE_NUMBER;

}

void LeaveQueue(Queue Q, int e)

{

if(Q.rear != Q.front)

e = Q.elem[Q.front];

else

printf(“队列空!\n”);

Q.front = (Q.front+1)%MAX_QUEUE_NUMBER;

}

int LocateVex(Net ga,char *name)

{

int i;

for(i=0;iga.vexnum;i++)

if(strcmp(name,ga.vexs[i].szName)==0)

return i;

return -1;

}

void crt_net(Net ga)

{

ArcNode *p;

char name1[40],name2[40];

int i,j,k;

double w;

printf(“请输入顶点数和弧数:”);

scanf(“%d%d”,ga.vexnum,ga.arcnum);

printf(“请依次输入顶点名:\n”);

for(i=0;iga.vexnum;i++)

{

scanf(“%s”,ga.vexs[i].szName);

ga.vexs[i].firstarc=NULL;

}

for(k=0;kga.arcnum;k++)

{

printf(“请输入相邻的两个定点和权值:”);

scanf(“%s%s%lf”,name1,name2,w);

i=LocateVex(ga,name1);

j=LocateVex(ga,name2);

p=new ArcNode;

p-adjvex=j;

p-adj=w;

p-nextarc=ga.vexs[i].firstarc;

ga.vexs[i].firstarc=p;

}

}

void DFS(Net ga,char *name,int *visited)

{

int v,w;

ArcNode *p;

v=LocateVex(ga,name);

visited[v]=1;

printf(“%s “,ga.vexs[v].szName);

p=ga.vexs[v].firstarc;

while(p!=NULL)

{

w=p-adjvex;

if(visited[w]==0)

DFS(ga,ga.vexs[w].szName,visited);

p=p-nextarc;

}

}

void DFSTravel(Net ga,char *name)

{

int v,k=0;

int visited[20];

for(v=0;vga.vexnum;v++)

visited[v]=0;

for(v=LocateVex(ga,name);k!=2;v=(v+1)%(ga.vexnum-1))

{

if(v+1==LocateVex(ga,name))

k++;

if(visited[v]==0)

DFS(ga,ga.vexs[v].szName,visited);

}

}

void BFSTravel(Net ga,char *name)

{

ArcNode *p;

int v,w,u,k=0;

Queue Q;

int visited[20];

for(v=0;vga.vexnum;v++)

visited[v]=0;

InitQueue(Q);

for(v=LocateVex(ga,name);k!=2;v=(v+1)%(ga.vexnum-1))

{

if(v+1==LocateVex(ga,name))

k++;

if(visited[v]==0)

{

visited[v]=1;

printf(“%s “,ga.vexs[v].szName);

EnterQueue(Q,v);

while(EmptyQueue(Q)!=0)

{

LeaveQueue(Q,u);

p=ga.vexs[u].firstarc;

while(p!=NULL)

{

w=p-adjvex;

if(visited[w]==0)

{

printf(“%s “,ga.vexs[w].szName);

visited[w]=1;

EnterQueue(Q,w);

}

p=p-nextarc;

}

}

}

}

}

void main()

{

char name[40];

Net ga;

crt_net(ga);

printf(“请输入深度优先遍历开始点的名:”);

scanf(“%s”,name);

printf(“深度优先遍历:”);

DFSTravel(ga,name);

printf(“\n”);

printf(“请输入广度优先遍历开始点的名:”);

scanf(“%s”,name);

printf(“广度优先遍历:”);

BFSTravel(ga,name);

printf(“\n”);

}

c语言流程图怎么画

画法如下:

第一步:以特定的图形符号加上说明,表示算法的图,称为流程图或框图

打开流程编辑工具。

第二步:选择对应的图形

开始结束用椭圆形

过程用长方形

第三步::绘制整个流程的过程

第四步:将各个流程节点用线连接起来

第五步:添加备注

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 02:21:55
下一篇 2024年3月25日 02:30:41

相关推荐

  • c语言地址值加1是什么意思啊,c语言物理地址是什么

    C语言里字符地址加一和数字地址加一有什么不同 在C语言中,1表示字符1(字符型常量); 1表示数字1(数字型常量)。 ,数据类型不同:数字1是数值类型中的整数类型(int)数字字符‘1’是字符类型(char)2,处理方式不同:数字1按照数值信息的处理方式处理。数字字符‘1’按照字符串的处理方式处理。3,表达方式不同:数字1的占位符为%d。 字符型数据类型有c…

    2024年5月19日
    3900
  • freebsdc语言,freebsd能干什么

    C语言最文件操作函数(2) 1、定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。 2、C语言标准库提供了一系列文件操作函数。文件操作…

    2024年5月19日
    4200
  • c语言浮点数判等,c语言浮点数表示方法举例

    C语言从键盘输入2个浮点数并比较,若相等,输出商的整数部分,否则输出… 前面声明变量的时候类型是浮点型,所以格式符应该使用%f而不是%d,%d是整型。 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以%开始, 后跟一个或几个规定字符,用来确定输出内容格式。 浮点类型不能比较相等或不等,但…

    2024年5月19日
    3100
  • c语言的流有什么用,c语言流输出

    【c语言】“从流中取一字符串”这个“流”是什么意思? 流是磁盘或其它外围设备中存储的数据的源点或终点。”。这是在《C程序设计语言》上的原话。据我的理解,流主要是指一种逻辑上的概念,它提供或存储数据。产生数据的叫输入流,消耗数据的叫输出流。 C语言的I/O系统为用户提供了一个接口,该接口与实际的存取设备无关。只是设备的一个抽象表示形式。这个抽象的接口称为流,实…

    2024年5月19日
    3200
  • c语言字符型的特点,c语言中字符类型

    c语言字符型与非字符型的区别 1、各种数据类型的关键词不同。short、long、int、float、double、char六个关键词表示C语言里六种基本数据类型。不同数据类型占用内存的大小不同。 2、数据计算类型不同。基本数据类型分为三类:整数型(定点型)、实数型(浮点型)和字符型。除了基本数据类型,还有构造类型(数组、结构体、共用体、枚举类型)、指针类型…

    2024年5月19日
    3900
  • c语言入门示例,c语言入门自学软件

    用c语言编程如何实现求和的程序代码? 利用C语言编写一个求两数相加的和的编程思想和方法如下:首先需要定义三个变量a,b,c,两个为相加的数,第三个为相加后得到的和。然后使用scanf()语句接收从键盘输入的两个数,为变量a,b赋值。 c语言编程利用自定义函数求两个数的和的方法如下:首先需要定义一个自定义函数,命名为sum,参数为两个整数a和b,返回值为整数类…

    2024年5月19日
    4500
  • c语言全角转半角,c语言全角字符是什么

    怎么把文字的全角符号切换成半角 1、全角和半角的切换的快捷键是键盘上的【Shift】+【空格键】。一般输入法默认切换全角和半角的组合键是键盘上的【Shift】+【空格键】。 2、第一种方法:使用快捷键快速更换全/半角,快捷键为Shift+Space。第二种方法:通过点击中文输入法状态栏上的全/半角符号切换,以下图这个输入法状态栏为例,点击状态栏上的“半角符号…

    2024年5月19日
    4600
  • c语言研究,C语言研究方法

    C语言的知识有什么? c语言入门基础知识点有: c语言的命名;变量及赋值;基本数据类型;格式化输出语句;强制类型转换;常量;自动类型转换。C语言是一种通用的、面向过程式的计算机程序设计语言。 c语言基础知识有:c语言的命名。变量及赋值。基本数据类型。格式化输出语句。强制类型转换。常量。自动类型转换。c语言的特点:广泛性。C语言的运算范围的大小直接决定了其优劣…

    2024年5月19日
    3400
  • c语言圆弧插补,圆弧插补编程中i,j,k

    谁有用C语言编写的直线,圆弧插补程序 1、C语言的话画直线用MoveTo()和LineTo()很简单啊。 2、程序问题是自己检查的,没有人会跟你看程序。你只要说明方法或者是流程图。你做的是直线逐点比较。先砍掉插补程序,看能否画划线,在添加第一象限插补,最后全加上去。确保每个步骤添加进去的代码没有问题。 3、.直线插补G01 格式:G01 X(U)_Z(W)_…

    2024年5月19日
    3600
  • c语言新建头文件,c语言建立头文件

    C语言中新建一个C/C++头文件和一个与C/C++源文件有什么区别? 有区别,头文件不参加编译,只是调用,可以定义类,结构体,联合体等等 源文件要参见编译,并且可以包含头文件,main()函数只能在源文件中,定义函数,头文件可以进行的,源文件都可以进行,反之不然。 头文件和源文件在本质上没有任何区别。 只不过一般:后缀为 .h 的文件是头文件,内含函数声明、…

    2024年5月19日
    7000

发表回复

登录后才能评论



关注微信