Anda di halaman 1dari 3

//http://www.inguta.cl/wp/?

p=280
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

void ingresar_grafo();
void imprimir_grafo();
int w =0;
int n;
typedef struct nodo
{
int dato;
struct nodo *sgte;
}
nodo;

nodo *vector[20],*actual;

main()
{

int opcion;

do
{
system("CLS");
printf("\n\t\t\t\t***MENU***\n");
printf("\n\n Diagrama De Pert\n");
printf("\n * Solo trabajar con numeros *\n\n");

printf("\n 1.- Ingresar Nodos");


printf("\n 2.- Imprimir Diagrama:");
printf("\n 3.- SALIR");

printf("\n\n Ingrese una opcion: ");


cin>>opcion;

if(opcion>3 || opcion<0)
{
printf("\n Opcion NO VALIDA concentrese porfavor");
printf("\n\n ** PRESIONE CUALQUIER TECLA PARA VOLVER AL MENU **");
getch();
}

switch(opcion)
{
case 1:
ingresar_grafo();
break;

case 2:
imprimir_grafo();
break;
case 3:
opcion=0;
}
}
while(opcion!=0);
getch();
}

void ingresar_grafo()
{
int i,m,j,valor, x[20],y[20];
printf( "Ingrese n: ");
cin>>n;
for(i=0;i<n;i++)
adyacente:
{
y[i]=i+1;
if(i==n-1)
{
printf("\n\nNodo final\n");
}
printf("Ingrese numero de vertices adyacentes a %d:",i+1);
cin>>m;
if(i==n-1)
{
m=0;
printf("No Se Puede Poner Un Nodo Adyacente Al Nodo
Final\n\n");
getch();
}
if(m==0 && i!=n-1)
{
printf("Debe Se�alar a Un Nodo\n\n");
getch();
goto adyacente;
}

for(j=0;j<m;j++)
{
intenta:
printf("Ingrese vertice:");
cin>>valor;
if(valor==i+1)
{
printf("No Puedes Apuntar Al Mismo
Nodo\n\n");
goto intenta;
}
x[j]=valor;

if(valor==1)
{
printf("No Puedes Apuntar Al Nodo
Inicio\n\n");
goto intenta;
}
if(valor>n||valor<1)
{
printf("No Puedes Crear Mas Nodos De Los
Preestablecidos\n\n");
goto intenta;
}
for(int h=0 ;h!=j;h++)
{
if(x[h]==x[j])
{
printf("No Puedes Apuntar 2
veces A Un Nodo\n\n");
goto intenta;
}
}
if(i>2)
{
for(int h=i ;h>2;h--)
{
for(int hh=0;hh!=j;h++)
{
if(y[h]==x[hh])
{
pr
intf("No Puedes Apuntar A Un Nodo Que Y Haya Se�alado A Este\n\n");
go
to intenta;
}
}
}
}
actual = (nodo *) malloc(sizeof(nodo));
actual->dato = valor;
actual->sgte = vector[i];
vector[i] = actual;
}
}
w=n;
}

void imprimir_grafo()
{
int i;
for(i=0;i<w;i++)
{
printf("\nAdyacente al nodo %d: ",i+1);
actual=vector[i];
while(actual != NULL)
{
printf("% d", actual->dato);
getch();
actual = actual->sgte;
}
}

Anda mungkin juga menyukai