Sobre este proyecto
it-programming / desktop-apps
Abierto
Utilizando el ejemplo muestra hecho en C++ o Java, crear las funciones para eliminar vértices (eliminar un nodo en una lista ligada) y eliminar aristas (el mismo caso).
#Include <iostream>
#include <cstdlib> //librerias necesarias para que las instruccuiones sean reconocidas por el compilador
using namespace std;
struct nodo //estructura del vertice y arista
{
int dato; // cuando es un vertice guarda un dato pero si es una arista guara el peso
struct nodo *liga_vertice; //guardan las direcciones de los siguientes nodos o vertices y aristas
struct nodo *liga_arista;
};
typedef struct nodo *registro;
registro sig_ver, ant_ver, cab_ver,sig_ari, ant_ari,dir1,dir2; //apuntadores de memoria
registro nuevo_vertice(int dat) //a�ade un nuevo vertice
{
registro reg_ver = new(struct nodo); //instruccion para pedir memoria con la estructura del vertice o nodo
reg_ver->dato = dat;
reg_ver->liga_vertice=null;
reg_ver->liga_arista= null;
return reg_ver;
}
void insertarvertice(int dat) //funcion para insertar un nuevo vertice
{
int sw;
sw=0;
ant_ver=cab_ver;
sig_ver=cab_ver;
while (sig_ver != null && sw==0) //recorre el grafo verificando si el vertive existe, sino existe lo adiciona al final
{ //si existe saca u mensaje de error
if (sig_ver->dato==dat)
{
sw=1;
}
else
{
ant_ver=sig_ver;
sig_ver=sig_ver->liga_vertice;
}
}
if (sw==1)
{
cout << "\n vertice ya existe no se adiciona\n";
}
else
{
if (cab_ver==null)
{
cab_ver=nuevo_vertice(dat); //el primer vertice queda como cabeza
}
else
{
ant_ver->liga_vertice=nuevo_vertice(dat); //se adiciona despues del ultimo vertice
}
cout << "vertice adicionado \n";
}
}
registro recorrer_vertice(int dat)
{
registro dir;
dir=null;
sig_ver=cab_ver;
while (sig_ver != null) //recorre el grafo buscando uno en especial
{
if (sig_ver->dato==dat)
{
dir=sig_ver;
}
sig_ver=sig_ver->liga_vertice;
}
return dir;
}
registro nueva_arista(int pes) //a�ade una nueva arista al vertice
{
registro reg_ari = new(struct nodo); //instruccion para pedir memoria con la estructura de las aristas
reg_ari->dato = pes;
reg_ari->liga_arista=null;
reg_ari->liga_vertice=dir2;
return reg_ari;
}
void insertararista(int dato_destino) //funcion para insertar una nueva arista
{
int sw2,pes;
sw2=0;
ant_ari=dir1;
sig_ari=dir1;
while (sig_ari != null && sw2==0) //recorre la sublista de aristas de ese vertice
{
if (sig_ari->dato==dato_destino)
{
sw2=1;
}
else
{
ant_ari=sig_ari;
sig_ari=sig_ari->liga_arista;
}
}
if (sw2==1) //si la arista existe no se adiciona
{
cout<<"arista ya existe no se adiciona \n\n ";
}
else
{
cout<< "digite el peso de la arista: ";
cin >> (pes);
ant_ari->liga_arista=nueva_arista(pes);
}
}
void verlista()
{
cout<< "\n\n ver lista de vertices y sus aristas";
sig_ver=cab_ver;
while (sig_ver != null) //busca los vertices
{
cout << "\n el nodo ";
cout<< (sig_ver->dato );
cout << " tiene las siguientes aristas ";
sig_ari=sig_ver->liga_arista; //pasa al siguiente vertice o nodo
while (sig_ari != null) //busca las aristas
{
cout << " ";
dir1=sig_ari->liga_vertice;
cout<< dir1->dato;
sig_ari=sig_ari->liga_arista; //pasa a la siguiente arista
}
sig_ver=sig_ver->liga_vertice;
}
}
int main() //programa principal
{
cab_ver = null; //grafo vacio
int dato_origen,dato_destino;
int sw,opc=10;
char resp;
while (opc != 4)
{
cout << "\n grafo con vertices (nodos) y las aristas que los unen \n";
cout << "\n 1. Creacion de vertices";
cout << "\n 2. Creacion de aristas";
cout << "\n 3.
Mostrar grafo";
cout << "\n 4. SALIR";
cout << "\n SELECCIONE OPCION ENTRE 1 y 4 ";
cin>>(opc);
switch (opc)
{
case 1: Resp='s';
while (Resp =='s') //a�ade vertices hsta que diga que NO (n)
{
cout << "Digite dato para vertice (dato numerico): "; //se pide cual es el vertice origen
cin >> dato_origen;
insertarVertice(dato_origen); //se llama el metodo insertarVertice (para a�adir un nuevo nodo o vertice)
cout <<"\n Desea continuar insertando vertices s/n?: ";
cin >>Resp;
}
break;
case 2: Resp='s';
while (Resp =='s') //a�ade aristas hsta que diga que NO (n)
{
cout << "Digite dato nodo origen (dato numerico): ";
cin >> dato_origen;
cout << "Digite dato nodo destino (dato numerico): ";
cin >> dato_destino;
dir1=recorrer_vertice(dato_origen);
dir2=recorrer_vertice(dato_destino);
if (dir1==NULL || dir2==NULL)
{
cout <<"\n Nodo origen o destino no existen revise";
}
else
{
insertarArista(dato_destino); //se llama el metodo insertarVertice (para a�adir un nuevo nodo o vertice)
}
cout <<"\n Desea continuar insertando vertices s/n?: ";
cin >>Resp;
}
break;
case 3: verlista();
cout << endl << endl;
system("pause"); //genera una pausa para ver los datos
break;
}
}
return 0;
}
Categoría Programación y Tecnología
Subcategoría Aplicaciones de escritorio
¿Cuál es el alcance del proyecto? Bug o cambio pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Experiencia en este tipo de proyectos No (No he administrado este tipo de proyectos anteriormente)
Integraciones de API Otros (Otras APIs)
Plataformas requeridas Windows
Duración del proyecto 1 a 3 meses
Habilidades necesarias