arreglo de listas + grafo

dio3000
06 de Marzo del 2004
Necesito saber si este que esta mal en este codigo:

#include <stdio.h>
#include <alloc.h>
#include<conio.h>

struct NODO{
int dato; //se crea estructura global
struct NODO *sig;
};

typedef struct NODO *NODOPTR; //se le asigna un apuntador a la estructura

void inserta(NODOPTR *,int); //funciones
void imprime(NODOPTR *,int);

void main(void) //funcion principal
{
clrscr(); //se limpia pantalla
FILE *arch; //se crea apuntador para archivo
int n,k,i; //se declaran variables
NODOPTR *arreglo_listas; //se crea un apuntador de arreglos de listas
NODOPTR P; //tipo NODOPTR
struct arcos
{ //se crea estructura
int vx,vy;
}*arcos;

if((arch=fopen("grafo1.txt","rt"))!=NULL)//se abre archivo
{
fscanf(arch,"%d,%d",&n,&k); //se obtienen valores de n y k
arcos=(struct arcos *)malloc(sizeof(struct arcos)*k);//se le asig. mem. a arcos
for(i=1;i<=k;i++)
{
fscanf(arch,"%d,%d",&arcos[i-1].vx,&arcos[i-1].vy);//se obtienen los arcos x,y
}
arreglo_listas=(NODOPTR *)malloc(sizeof(NODOPTR)*n);//se le asig. mem. a arreglo_listas
for(i=0;i<n;i++)
{
arreglo_listas[i]->dato=i+1; //se inicializan los arreglo_listas
arreglo_listas[i]->sig=NULL;
}
for(i=1;i<=k;i++)
{
inserta(&arreglo_listas[arcos[i-1].vx],arcos[i-1].vy); //se le insertan valores a los arreglo_listas
}
fclose(arch); //se cierra archivo
}
/* for(i=0;i<n;i++) //se imprime arreglo_listas
{
printf("La lista es:n");
while(arreglo_listas[arcos[i].vx]!=NULL)//se imprime hasta que llege a NULL
{
printf("%d->",arreglo_listas[arcos[i].vx]->dato);
arreglo_listas[arcos[i].vx]=arreglo_listas[arcos[i].vx]->sig;//se recorre
}
printf("NULL n");
}*/
imprime(arreglo_listas,n);
free(arcos); //se libera arcos
for(i=0;i<n;i++)
free(arreglo_listas[arcos[i+1].vx]);//se libera arreglo_listas
free(P); //se libera P
getch();
}

void inserta(NODOPTR *cabeza,int valor)//funcion inserta
{
NODOPTR P;
NODOPTR temp;
P=(NODOPTR)malloc(sizeof(NODO));
P->dato=valor;
P->sig=NULL;
temp=(*cabeza);
while(temp->sig!=NULL)
temp=temp->sig;
temp->sig=P;
}

void imprime(NODOPTR *arreglo_listas,int n) //funcion imprime
{
for(int i=0;i<n;i++)
{
printf("La lista es:n");
while(arreglo_listas[i]!=NULL)
{
printf("%d->",arreglo_listas[i]->dato);
arreglo_listas[i]=arreglo_listas[i]->sig;
}
printf("NULL n");
}
}

santiago
06 de Marzo del 2004
todo esta mal ja,ja,ja,ja