(데이터 구조) 그림 을 만 들 거나 인접 표 저장 소 는 정점 의 도 (입도, 출 도) 를 계산 하고 깊이 우선 또는 광 도 를 우선 으로 그림 을 옮 겨 다 니 는 것 을 나타 낸다.(컴 파일 러: VS)
5932 단어 데이터 구조
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define ERROR 0
typedef int Status;
using namespace std;
헤더 파일: '2. h'
#include "1.h"
#define MAX_VERTEX 20
typedef char VertexType;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX];
typedef struct
{
AdjList vertices;
int vexnum, arcnum;
int kind;
}ALGraph;
//
typedef int QElemtype;
#define MAXQSIZE 100
typedef struct
{
QElemtype *base;
int front;
int rear;
}SqQueue;
헤더 파일: '3. h' (함수 의 실현)
#pragma once
#include "2.h"
Status LovateVex(ALGraph &G, VertexType v)
{
int i;
for (i = 0; i < G.vexnum; i++)
{
if (G.vertices[i].data == v)
return i;
}
}
Status CreatDG(ALGraph &G)//
{
VertexType v1, v2;
int j, k;
ArcNode *p;
cout << " :";
cin >> G.vexnum >> G.arcnum;
int i;
cout << " :";
for (i = 0; i < G.vexnum; i++)
{
cin >> G.vertices[i].data;
G.vertices[i].firstarc =NULL;
}
cout << " , :";
for (i = 0; i < G.arcnum; i++)
{
cin >> v1 >> v2;
j=LovateVex(G, v1);
k = LovateVex(G, v2);
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = k;
p->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = p;
}
return OK;
}
Status CreatUDG(ALGraph &G)//
{
VertexType v1, v2;
int j, k;
ArcNode *p,*q;
cout << " :";
cin >> G.vexnum >> G.arcnum;
int i;
cout << " :";
for (i = 0; i < G.vexnum; i++)
{
cin >> G.vertices[i].data;
G.vertices[i].firstarc = NULL;
}
cout << " , :";
for (i = 0; i < G.arcnum; i++)
{
cin >> v1 >> v2;
j = LovateVex(G, v1);
k = LovateVex(G, v2);
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = k;
p->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = p;
q= (ArcNode*)malloc(sizeof(ArcNode));
q->adjvex = j;
q->nextarc = G.vertices[k].firstarc;
G.vertices[k].firstarc = q;
}
return OK;
}
Status GreatGraph(ALGraph &G)//
{
cout << " :" << "0-DG,1-UDG" << endl;
cin >> G.kind;
switch (G.kind)
{
case 0:return CreatDG(G); break;
case 1:return CreatUDG(G); break;
}
}
void PrintGraph(ALGraph G)//
{
ArcNode *p;
cout << endl << " :" << G.vexnum << " " << G.arcnum;
cout << endl << " :";
int i;
for (i = 0; i < G.vexnum; i++)
{
cout << " " << G.vertices[i].data;
}
cout << endl << " :";
int j;//
for (i = 0; i < G.vexnum; i++)
{
cout << endl<< G.vertices[i].data << " :";
p = G.vertices[i].firstarc;
while (p)
{
j = p->adjvex;
cout << " " << G.vertices[j].data;
p = p->nextarc;
}
cout << endl;
}
}
void FindOUTDegree(ALGraph G)//
{
int i;
ArcNode *p;
int count;
cout << " :" << endl;
for (i = 0; i < G.vexnum; i++)
{
count = 0;
p = G.vertices[i].firstarc;
while (p)
{
count++;
p = p->nextarc;
}
cout << G.vertices[i].data << ":" << count;
cout <adjvex];
p = p->nextarc;
}
}
int j;
for (j = 0; j < G.vexnum; j++)
{
cout << G.vertices[j].data << " :" << indegree[j] << endl;
}
}
bool visited[MAX_VERTEX];
void DFS(ALGraph G, int i)
{
visited[i] =true;
cout << G.vertices[i].data << endl;
ArcNode *p;
int w;
p = G.vertices[i].firstarc;
while (p)
{
w = p->adjvex;
if (!visited[w])
DFS(G, w);
p = p->nextarc;
}
}
void DFSTraverse(ALGraph G)//
{
int i;
for (i = 0; i < G.vexnum; i++)
visited[i] = false;
for (i = 0; i < G.vexnum; i++)
{
if (!visited[i])
DFS(G, i);
}
}
//
#pragma once
Status InitQueue(SqQueue &Q)
{
Q.base = (QElemtype*)malloc(MAXQSIZE * sizeof(QElemtype));
if (!Q.base) return OVERFLOW;
Q.front = Q.rear = 0;
return OK;
}
Status EnQueue(SqQueue &Q, QElemtype e)
{
if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q, QElemtype &e)
{
if (Q.front == Q.rear) return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
return OK;
}
Status QueueEmpty(SqQueue Q)
{
return Q.front == Q.rear;
}
void BFSTraverse(ALGraph G)//
{
bool visited[MAX_VERTEX];
int i;
int w;
QElemtype e;
ArcNode *p;
for (i = 0; i < G.vexnum; i++)
visited[i] = false;
SqQueue Q;
InitQueue(Q);
for (i = 0; i < G.vexnum; i++)
{
if (!visited[i])
{
visited[i] = true;
cout << G.vertices[i].data << endl;
EnQueue(Q, i);
while (!QueueEmpty(Q))
{
DeQueue(Q, e);
for (p = G.vertices[i].firstarc; p; p = p->nextarc)
{
w = p->adjvex;
if (!visited[w])
{
visited[w] = true;
cout << G.vertices[w].data << endl;
EnQueue(Q,w);
}
}
}
}
}
}
주 함수:
#include "3.h"
int main()
{
ALGraph G;
GreatGraph(G);
PrintGraph(G);
FindOUTDegree(G);
FindINDegree(G);
cout << " :" << endl;
DFSTraverse(G);
cout << " :" << endl;
BFSTraverse(G);
system("pause");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.