📄 qq.txt
字号:
#include "stdafx.h"
#include <iostream.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef struct ArcNode
{
int adjvex; //弧邻接的顶点
char info; //弧相关信息
struct ArcNode *nextarc; //指向下一条弧的指针
}ArcNode;
typedef struct Vnode
{
char data; //结点信息
ArcNode *link; //指向第一个和该顶点相连的弧
}Vonde,AdjList[MAX+1];
//图结构体
typedef struct
{
AdjList vertices;
int vexnum; //顶点
int arcnum; //边数
}ALGraph;
void CreateGraph(ALGraph &G)
{
int i,j,s,d;
ArcNode *p;
//输入结点信息
for(i=1;i<=G.vexnum;i++)
{
getchar();
printf("第%d个结点信息(char型):",i);
scanf("%c",&G.vertices[i].data);
G.vertices[i].link=NULL;
}
//输入边的信息
for(i=1;i<=G.arcnum;i++)
{
printf("第%d条----起点序号,终点序号:",i);
scanf("%d%d",&s,&d);
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=d;
p->info=G.vertices[d].data; //存储边的权值等信息,此处以顶点数据代替
p->nextarc=G.vertices[s].link; //p插入顶点S的邻接表中
G.vertices[s].link=p;
}
}
//深度遍历的算法实现
void DFS(AdjList g,int v,int visited[])
{
ArcNode *w;
int i;
printf("%d",v);
visited[v]=1;
w=g[v].link;
while(w!=NULL)
{
i=w->adjvex;
if(visited[i]==0)
DFS(g,i,visited);
w=w->nextarc;
}
}
//广度优先遍历图的算法实现
void bfs(AdjList g,int v, int visited[])
{
int qu[MAX],f=0,r=0;
ArcNode *p;
printf("%d",v);
qu[0]=v;
while(f<=r)
{
v=qu[f++];
if(visited[v]==0)
{
v=p->adjvex;
if (visited[v]==0)
{
visited[v]=1;
printf("%d",v);
qu[++r]=v;
}
p=p->nextarc;
}
}
}
void Traver(AdjList g,int n,int id)
{
int i;
static int visited[MAX];
for(i=1;i<=n;i++)
visited[i]=0;
for(i=1;i<=n;i++)
if(visited[i]==0)
{
if(id==1) DFS(g,i,visited);
if(id==2) DFS(g,i,visited);
}
}
int main(int argc, char* argv[])
{
ALGraph G;
int id;
printf("输入结点数和边数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
CreateGraph(G);
printf("选择深度遍历或者广度遍历:(1 DFS,2 BFS)");
scanf("%d",&id);
Traver(G.vertices,G.vexnum,id);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -