Problema con programa en C++
Hola!
Tengo que realizar un ejercicio en el que se me pide hacer una busqueda por amplitud de un grafo y he hecho el siguiente programa:
#include <string.h> // Esto es para la funcion memset
#include <iostream>
using namespace std;
#define MAX_NODOS 26
///////////////////////////////////////////////////////////
////////// VARIABLES GLOBALES ///////////////
///////////////////////////////////////////////////////////
int nnodos; // Numero de nodos del grafo
int naristas; // Numero de aristas del grafo
bool G[MAX_NODOS][MAX_NODOS]; // Matriz de adyacencia
bool visitado[MAX_NODOS]; // Marcas de nodos visitados
struct nodo {
int info;
struct nodo *sig;
};
struct cola {
struct nodo *pri;
struct nodo *ult;
int n;
};
///////////////////////////////////////////////////////////
////////// FUNCIONES DEL PROGRAMA ///////////////
///////////////////////////////////////////////////////////
void leeGrafo (void)
// Procedimiento para leer un grafo de la entrada
{
cin >> nnodos >> naristas;
if (nnodos<0 || nnodos>MAX_NODOS) {
cerr << "Numero de nodos (" << nnodos << ") no validon";
exit(0);
}
memset(G, 0, sizeof(G));
char c1, c2;
for (int i= 0; i<naristas; i++) {
cin >> c1 >> c2;
G[c1-'A'][c2-'A']= true;
}
};
bool esVacia (struct cola c) {
return (c.n=0);
};
void crearCola (struct cola c) {
c.n=0;
c.pri= NULL;
c.ult= NULL;
};
void insertarCola (int x , struct cola c)
{
struct nodo *p;
p=(struct nodo *)malloc(sizeof(struct nodo));
(*p).info = x;
if (esVacia(c)) {
c.pri=p;
c.ult=p;
c.n=1;
}
else {
(c.*ult).sig=p; /***/
c.ult=p;
c.n++;
};
};
void suprimirCola (struct cola c)
{
if (!esVacia(c)) {
struct nodo *p;
p= c.pri;
c.pri= (c.*pri).sig; /***/
delete (p);
c.n--;
};
};
int frenteCola (struct cola c)
{
return (c.*pri).info; /***/
};
void bpa (int v)
{
int x;
struct cola c;
crearCola(c);
visitado[v]=true;
cout << char(v+'A');
insertarCola(v, c);
while (c.n !=0) {
x=frenteCola(c);
suprimirCola(c);
for (int y= 0; y<nnodos; y++){
if (!visitado[y] && G[x][y]){
visitado[y]= true;
insertarCola(y, c);
};
};
};
cout << endl;
};
void busquedaPA (void)
// Procedimiento principal de la busqueda en profundidad
{
memset(visitado, 0, sizeof(visitado));
for (int v=0 ; v<nnodos ; v++){
if (!visitado[v]){
bpa(v);
};
cout << endl;
};
};
int main (void)
{
int ncasos;
cin >> ncasos;
for (int i= 0; i<ncasos; i++) {
leeGrafo();
busquedaPA();
};
};
Pues bien, el problema está en que me da un error en las lÃneas con /***/, diciendo que tanto pri como ult "no se declararon en este ámbito". ¿Por qué puede ser? Muchas gracias de antemano.
Tengo que realizar un ejercicio en el que se me pide hacer una busqueda por amplitud de un grafo y he hecho el siguiente programa:
#include <string.h> // Esto es para la funcion memset
#include <iostream>
using namespace std;
#define MAX_NODOS 26
///////////////////////////////////////////////////////////
////////// VARIABLES GLOBALES ///////////////
///////////////////////////////////////////////////////////
int nnodos; // Numero de nodos del grafo
int naristas; // Numero de aristas del grafo
bool G[MAX_NODOS][MAX_NODOS]; // Matriz de adyacencia
bool visitado[MAX_NODOS]; // Marcas de nodos visitados
struct nodo {
int info;
struct nodo *sig;
};
struct cola {
struct nodo *pri;
struct nodo *ult;
int n;
};
///////////////////////////////////////////////////////////
////////// FUNCIONES DEL PROGRAMA ///////////////
///////////////////////////////////////////////////////////
void leeGrafo (void)
// Procedimiento para leer un grafo de la entrada
{
cin >> nnodos >> naristas;
if (nnodos<0 || nnodos>MAX_NODOS) {
cerr << "Numero de nodos (" << nnodos << ") no validon";
exit(0);
}
memset(G, 0, sizeof(G));
char c1, c2;
for (int i= 0; i<naristas; i++) {
cin >> c1 >> c2;
G[c1-'A'][c2-'A']= true;
}
};
bool esVacia (struct cola c) {
return (c.n=0);
};
void crearCola (struct cola c) {
c.n=0;
c.pri= NULL;
c.ult= NULL;
};
void insertarCola (int x , struct cola c)
{
struct nodo *p;
p=(struct nodo *)malloc(sizeof(struct nodo));
(*p).info = x;
if (esVacia(c)) {
c.pri=p;
c.ult=p;
c.n=1;
}
else {
(c.*ult).sig=p; /***/
c.ult=p;
c.n++;
};
};
void suprimirCola (struct cola c)
{
if (!esVacia(c)) {
struct nodo *p;
p= c.pri;
c.pri= (c.*pri).sig; /***/
delete (p);
c.n--;
};
};
int frenteCola (struct cola c)
{
return (c.*pri).info; /***/
};
void bpa (int v)
{
int x;
struct cola c;
crearCola(c);
visitado[v]=true;
cout << char(v+'A');
insertarCola(v, c);
while (c.n !=0) {
x=frenteCola(c);
suprimirCola(c);
for (int y= 0; y<nnodos; y++){
if (!visitado[y] && G[x][y]){
visitado[y]= true;
insertarCola(y, c);
};
};
};
cout << endl;
};
void busquedaPA (void)
// Procedimiento principal de la busqueda en profundidad
{
memset(visitado, 0, sizeof(visitado));
for (int v=0 ; v<nnodos ; v++){
if (!visitado[v]){
bpa(v);
};
cout << endl;
};
};
int main (void)
{
int ncasos;
cin >> ncasos;
for (int i= 0; i<ncasos; i++) {
leeGrafo();
busquedaPA();
};
};
Pues bien, el problema está en que me da un error en las lÃneas con /***/, diciendo que tanto pri como ult "no se declararon en este ámbito". ¿Por qué puede ser? Muchas gracias de antemano.
