"Estructuras de Datos y Algoritmos" tercer experimento // informaron de ninguna tabla de adyacencia construida a la figura.

Habitación No. 10-414
Nombre:
Fecha: 12/22/2018
Nombre del programa: Lista de gráfico de adyacencia no dirigida construcción
Experimento: (c) sin construir una lista de adyacencia grafo dirigido

En primer lugar, la finalidad y los requisitos (análisis de necesidades):

1, establecimiento y funcionamiento de una estructura de almacenamiento principal adyacente a la mesa y la mesa adyacente.
2, la configuración de una lista de adyacencia grafo no dirigido, el número de aristas necesario para introducir desde el teclado y el número de vértices, y muestra la configuración de la tabla adyacente)
Desarrollo experimental:. 1 a la mesa adyacente construido con la figura
2. Determinar borde la presencia de
3 grados buscan vértices

En segundo lugar, la básica ideas, principios y programa de diseño Descripción:

(Incluyendo la estructura del programa, estructuras de datos, de entrada / salida de diseño, Symbolic Nombre Descripción etc.)

En primer lugar, la estructura del programa

1. El archivo de cabecera
#include <stdio.h>
#include <stdlib.h>
#define LK 20 es
2. Las definiciones de la estructura de datos y de los signos
typedef struct arcnode
{
int adjvex; // siguiente borde vértices numerados
arcnode struct * nextarc ; // puntero a la siguiente cara uno
} ArcNode;
typedef struct vexnode
{
int vértice; // vértices números
ArcNode * firstarc; // puntero que apunta al primer lado
} adjList [LK];
typedef struct el GRA
{
adjlist adjList;
int vexnum, arcnum; // número de vértices y aristas
} Graph;

En segundo lugar, la definición funcional de la función

1. Crear una tabla adyacente
CreateList void (Graph * GA, A int, int B)
2. Insertar el borde relevante
sin efecto el inserto (Graph * GA)
3. Salida tabla de adyacencia
void PrintGraph (Gráfico * GA)
4. La función principal del interfaz
int main ()
{
constructo no dirigidos tabla adyacente
tabla de adyacencia salida
}

En tercer lugar, las ideas del programa

establecimiento figura a la mesa adyacente, la lista de adyacencia de salida. Para cada figura de vértice vi, que todos los vértices vj cadena vi adyacente en una única lista enlazada, esta lista se denomina una lista única de adyacencia vértice vi. Tabla de vecinos para cada nodo de la tabla tiene dos dominios, un dominio es punto adyacente (adjvex), para almacenar los vértices vi y vj número de contacto adyacente; el otro es dominio de cadena (Siguiente), se utiliza para cadena mesa juntos todos los nodos adyacentes a la mesa. Encabezado y lista de adyacencia nodo para cada vértice vi se proporciona que tiene dos campos: un vértice campo (vértice), utilizados para almacenar la información de los vértices vi; campo es un puntero a otro (primero), para depositar un puntero cabeza apuntando al primer nodo vi mesa adyacente.

En tercer lugar, el problema de la depuración y programas generados en el proceso de ejecución y las medidas adoptadas:

Depuración proceso hubo algunas faltas de ortografía, después de la inspección se puede corregir con prontitud. Algunos son pequeños diseño errores gramaticales, tal como una parte del valor inicial de la variable de conjunto de parámetros incorrectamente, haciendo error depuración. Después de analizar los resultados corregidos, y tratar de mejorar el rendimiento del algoritmo, la complejidad del tiempo se reduce. 
A través de este experimento, no más profundo impresión en el método de almacenamiento de la figura.

En cuarto lugar, el código fuente y comentarios:

#include<stdio.h>
#include<stdlib.h>
#define vnum 10
typedef struct arcnode
{
    int adjvex;                         /*下一条边的顶点编号*/
    struct arcnode * next;           /*指向下一条边的指针*/
}ArcNode;
typedef struct vexnode
{
    int vertex;                         /*顶点编号*/
    ArcNode *first;                  /*指向第一条边的指针*/
}AdjList[vnum];
typedef struct gp
{
    AdjList adjlist;
    int vexnum,arcnum;                  /*顶点和边的个数*/
}Graph;



//--------------------------------创建邻接表------------------------------- 
void CreateList(Graph *GA,int a,int b)     
{
    int i;
    GA->vexnum=a;
    GA->arcnum=b;
    for(i=0;i<GA->vexnum;i++)
    {
        GA->adjlist[i].vertex=i;         /*初始化顶点信息*/
        GA->adjlist[i].first=NULL;    /*初始化i的第一个邻接点为NULL*/
    }
}

//--------------------------------插入相关边-------------------------------- 
void Insert(Graph *GA)                    
{
    ArcNode *p;
    int i,j,k;
    for(k=0;k<GA->arcnum;k++)
    {
        printf("请输入第%d条边:",k+1);
        scanf("%d %d",&i,&j);
        p=(ArcNode *)malloc(sizeof(ArcNode));/*生成j的表结点*/
        p->adjvex=j;
        p->next=GA->adjlist[i].first;   /*将结点j链接到i的单链表中*/
        GA->adjlist[i].first=p;
        p=(ArcNode *)malloc(sizeof(ArcNode));/*生成i的表结点*/
        p->adjvex=i;
        p->next=GA->adjlist[j].first;   /*将结点i链接到j的单链表中*/
        GA->adjlist[j].first=p;
    }
}

//-------------------------------输出邻接表------------------------------ 
void PrintGraph(Graph *GA)                      
{
	printf("所生成邻接表如下:\n");
    int i;
    for(i=0;i<GA->vexnum;i++)
    {
        printf("v%d:",i);
        while(GA->adjlist[i].first!=0)
        {
            printf("-->%d",GA->adjlist[i].first->adjvex);
            GA->adjlist[i].first=GA->adjlist[i].first->next;
        }
		printf("\n");
    }
	printf("-----------------------------------\n");
}


//----------------------------------主函数---------------------------------- 
int main()
{
	int a,b,s,i=1;
    Graph GA;
	while(i)
	{
		printf("\n建立无向图--0\n输出邻接表--1\n"); 
		printf("按0或者1进行下一步\n"); 
		scanf("%d",&i);
		switch(i)
		{
			case 0:printf("-----------------------------------\n");
				printf("请输入无向图的顶点数和边数:"); 
				scanf("%d %d",&a,&b);
				CreateList(&GA,a,b);
				Insert(&GA);
				break;
			case 1: PrintGraph(&GA); 
				break; 
		}
		printf("\n0:结束\n1:继续\n");
		scanf("%d",&i);
	}
}

6.3.5 salida de funcionamiento:

程序运行进行构建无向图的邻接表并输出:

Aquí Insertar imagen Descripción

En sexto lugar, las ideas y la experiencia:

Publicado 35 artículos originales · ganado elogios 1 · vistas 1860

Supongo que te gusta

Origin blog.csdn.net/qq_40672635/article/details/90049961
Recomendado
Clasificación