Code:
// Grafuri.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <process.h>
#define clrscr() system("cls");
struct sarc;
typedef struct snod{
struct snod *urm;
struct sarc *a;
int cheie;
} nod;
typedef struct sarc{
nod *n;
struct sarc *urm;
}arc;
nod *h_nod=NULL;
//arc *caut_arc(nod *, nod *); // cauta arc
//arc *caut_arc(int n1, int n2,int *, nod *, nod *); //cauta arc
nod *caut_nod(nod *, int); // cauta nod
nod *add_nod(nod*,int); // adauga un nod;
arc *add_arc(arc*, int,int); // adauga un arc intre 2 noduri;
nod *caut_nod(nod *lista, int cheie)
{
nod *q1;
for (q1=lista; q1!=NULL && q1->cheie < cheie; q1=q1->urm);
if (q1!=NULL && q1->cheie == cheie)
return q1;
return NULL;
} /*caut nod*/
arc *cauta_arc(nod *n1, nod *n2){
if (n1==NULL || n2==NULL) return NULL;
arc *q1;
for (q1=n1->a; q1!=NULL && q1->n->cheie < n2->cheie; q1=q1->urm);
if (q1!=NULL && q1->n->cheie == n2->cheie)
return q1;
return NULL;
} /*caut arc*/
arc *caut_arc(int n1, int n2 ,nod *nodr1, nod *nodr2 ,int *err=NULL)
{
nod *nod1,*nod2;
if ((nod1=caut_nod(h_nod,n1))==NULL) {
printf("Nu exista primul nod: %d",n1);
if (err!=NULL) *err=1;
return NULL;
}
if ((nod2=caut_nod(h_nod,n1))==NULL) {
printf("Nu exista al doilea nod: %d",n2);
if (err!=NULL) *err=2;
return NULL;
}
if (err!=NULL) *err=0;
if (nodr1!=NULL) nodr1=nod1;
if (nodr2!=NULL) nodr2=nod2;
return cauta_arc(nod1,nod2);
} /*caut_arc*/
nod *add_nod(nod *lista, int v)
{
nod *q1, *q2, *aux;
if (caut_nod(lista,v)!=NULL){
printf("Nodul %d exista deja\n",v);
return lista;
}
if ((aux=(nod *)malloc(sizeof(nod)))==NULL)
{
printf("Eroare: memorie insuficienta\n");
exit(1);
}
aux->a=NULL; aux->cheie=v;
for (q2=q1=lista; q1!=NULL && q1->cheie < v;
q2=q1, q1=q1->urm);
if (q1!=NULL && q1->cheie == v)
{
printf("Eroare: Nodul %d apare in tabela\n", v);
return lista;
}
if (q1!=q2) /* daca inserarea nu se face la inceputul listei*/
{
q2->urm=aux;
aux->urm=q1;
return lista ;
}
/* daca inserarea se face la inceputul listei */
aux->urm=lista;
return aux;
}/* add_nod */
int add_arc(int n1, int n2){
arc *q1, *q2, *aux;
nod *nod1;
nod *nod2;
nod *l1,*l2;
int err;
if ((aux=caut_arc(n1,n2,nod1,nod2,&err))!=NULL) {
printf("Exista deja un arc intre nodurile: %d,%d",n1,n2);
return 3;
}
if (err) return err;
/*nod1=caut_nod(h_nod,n1);
nod2=caut_nod(h_nod,n2);*/
if ((aux=(arc *)malloc(sizeof(arc)))==NULL)
{
printf("Eroare: memorie insuficienta\n");
exit(1);
}
aux->n=NULL;
for (q2=q1=nod1->a; q1!=NULL && q1->n->cheie < n2;
q2=q1, q1=q1->urm);
if (q1!=NULL && q1->n->cheie == n2) // Nu ar trebuii sa se indplineasca aceasta conditie
{
// printf("Eroare: %s apare in tabela\n", s);
return 3;
}
if (q1!=q2) /* daca inserarea nu se face la inceputul listei*/
{
q2->urm=aux;
aux->urm=q1;
return 0;
}
/* daca inserarea se face la inceputul listei */
aux->urm=nod1->a;
nod1->a=aux;
return 0;
}
void intr(){
h_nod=add_nod(h_nod,1);
h_nod=add_nod(h_nod,3);
h_nod=add_nod(h_nod,2);
h_nod=add_nod(h_nod,1);
h_nod=add_nod(h_nod,5);
add_arc(1,3);
add_arc(3,5);
add_arc(5,1);
add_arc(1,3);
}
int main(int argc, char* argv[])
{
intr();
return 0;
}
when I call the function aux=caut_arc(n1,n2,nod1,nod2,&err)) in add_arc I becam the following error :The variable 'nod2' is being used without being defined.