Está en la página 1de 18

A) Si el grafo de N vrtices tiene lados paralelos introducir datos por teclado en la matriz ADYM.

Caso contrario utilizar la matriz ADY

PROCEDURE leermat(nfa,nca,x:byte; var a:txy);

x=1 i = 1, nfa, 1 j = 1, nca, 1 i = 1, nfa, 1 j = 1, nca, 1

'[',i,',',j,']:'

'[',i,',',j,']:'

a[i,j

a[i,j

a[i,j]=0 or a[i,j]=1

a[i,j]>=0

j j i i

FIN

B) Generar aleatoriamente el grafo de N vrtices, utilizando la matriz ADMY

PROCEDURE Grado1(nfa,nca:byte; a:txy);var v:tv

i = 1, nfa, 1 AUX=0 j = 1, nca, 1 AUX=AUX+a[i,j] j V[i]=AUX i FIN PROCEDURE b(nfa,nca:byte; var a:txy )

i = 1, nfa, 1 j = 1, nca, 1 a[i,j]:=random(10) a[i,j]>=0

j i FIN

C) Determinar el vector grados a partir de la matriz ADYM, incluyen dolazos

PROCEDURE c(nfa,nca:byte; a:txy; var v:tv)

grado1(nfa,nca,a,v1)

p=1, nca, 1 v[p]=0

a[p,p]=1

SI v[p]=v1[p]+a[p,p]

NO

i FIN

D) Determinar el vector grados a partir de la matriz ADYM, incluyendo lazos

PROCEDURE d(nfa,nca:byte; a:txy; var v:tv)

i=1, nfa, 1 j = 1, nca, 1 a2[i,j]:=0 j i i = 1, nfa, 1 j = 1, nca, 1 aux:=0

k = 1, nfa, 1 aux:=aux+a[i,k]*a[k,j] k a2[i,j]:=aux

i=j

SI v[i]:=aux

NO

j i

i = 1, nfa, 1

a[i,i]=1

SI v[i]=v[i]+1

NO

i FIN

E) Determinar el grado del grafo

PROCEDURE e5(nca:byte; v:tv; var gg:integer )

gg = 0

i = 1, nca, 1

a[i,i]=1

SI gg=v[i]

NO

i FIN

F) Calcular la cantidad de lados paralelos del grafo utilizando la matriz ADYM

PROCEDURE f(nfa,nca:byte;a:txy; var lp:integer )

lp = 0

i = 1, nfa, 1 j = 1, nca, 1

j = i

SI

j <> i NO NO

SI lp:=lp+a[i,j]

j i FIN
G) Calcular cuantos lazos tiene cada vrtice, cargando los resultados en un vector.

PROCEDURE G(nfa:byte;a:txy; var lazos:tv )

i = 1, nfa, 1 lazos[i]=a[i,i] i FIN

H) Determinar si el grafo es regular

PROCEDURE H(nfa:byte;v:tv; var band:boolean )

band=true k=v[1] i = 2, nfa, 1 k <> v SI band:=false; break

NO

FIN

K. DETERMINAR SI EL GRAFO ES UNITARIO. procedure initarip(v,l:integer; mi:txy); no v=1 'No es un grafo unitario' 'Es un grafo unitario' si

Fin unitario

L) Determinar si el grafo es nulo

M) Determinar la cantidad de secuencias de lados de longitud N entre dos vrtices


procedure m10(nfa,nca:byte; a:txy)

'Introdusca los vertices :'

'Introdusca el valor de X'

x1 'Introdusca el valor de Y

y1

((x1<>y1)and(x1<=nfa)and (y1<=nfa))

'Introdusca la longitud :'

lon>0 i<-1 , nfa, 1 j<- 1, nca,1 an[i,j] = a[i,j] j i z <-1 , lon-1 for i <- 1, nfa,1 j <- 1 , nca, 1 aux = 0 k <- 1, nfa, 1 aux:=aux+an[i,k]*a[k,j] k an[i,j] = aux j i i SL= an[x1,y1] 'Cantidad de SL entre ',x1,' y ',y1,' es = ',SL

fin

N) Determinar si tienen circuitos eulerianos


procedure n10(v:tv; nfa:byte; var CE:boolean)

bandera = true

for i <- 1, nfa, 1

V
if ((v[i] mod 2)<>0)

bandera = false

CE = bandera

fin

O)

Determinar si tuene camino Euleriano

procedure o10(v:tv; nfa:byte; var band:boolean)

c:=0

band:=true

for i <- 1, nfa, 1

V
v[i] mod 2 <> 0 c = c +1

V
c <> 2

band:=false

F
i

fin

P) Determinar si tiene camino Hamiltonianos


procedure p(v:tv; nfa:byte; var band:boolean)

band = false

for i <- 1, nfa, 1

V
(v[i]<(nfa-1)mod 2 band = false

F
i

V
band=true for i:=1 to nfa-1

F
p=0 for j <- i+1 , nfa, 1 p = v[i]+v[j];

V
p = nfa-1

El resulatco es: i,' ',j

fin

2. MODULO: MATRIZ DE INCIDENCIA, DADO EL GRAFO G(V,E) a) Introducir datos por teclado en la matriz inc
procedure a2(v,l:integer; var mi:txy);

'Introduzca los valores de la matriz que pueden ser 0 o 1'

for i <- 1 , v, 1

for j <- 1 to l

'INC[',i,',',j,']: '

mi[i,j]

((mi[i,j]<>0) AND (mi[i,j]<>1))

' ERROR'

F
(mi[i,j]=0) or (mi[i,j]=1);

j i

fin

b) Generar aleatoriamente el grafo de N vrtices y M lados, utilizando la matriz Inc


procedure b2(v,l:integer; var mi:txy)

randomize

for i <- 1 to v

for j <- 1 to l

mi[i,j] = 0

for i <- 1 to l

s=0

F
i<=(l/3)

V
pos=1

F
(i<=(l/1.5)) pos:=round(l/1.5);

pos:=round(l/3)

for j <- pos t, v, 1

mi[j,i] = round(random()*1);

mi[j,i] = round(random()*1)

V
s>=2

F
j

V
s=0

i=i-1

fin

c) Determinar el vector grados a partir de la matriz Inc, incluyendo lazos


procedure C2(v,l:integer; mi:txy; var vecgra:tv)

for i <- 1 , v, 1

sum = 0

for j = 1 to l

sum = sum + mi[i,j];

vecgra[i]:=sum; j i

for i <- 1 to l

sum = 0 for j <- 1 , v, 1

F
mi[j,i]=1

sum = sum + 1 p=j

j FV

V
sum=1 vecgra[p] = vecgra[p] + 1

fin

d) Convertir la matriz inc en ADYM

procedure d2(v,l:integer; mi:txy;var adym:txy)

c2(v,l,mi)

for i1 <- 1, v, 1

for j1<-1 to l

j1 i1

vect[i1] = mi[i1,j1]

for i <- 1 , v ,1

for j <- 1 , v,1

V
vect[i1] = mi[i,j]

F
i1=j

adym[i,j] = mi[]

j i

fin

e)
procedure e2(v,l:integer; mi:txy; var gginc:integer)

for i:=1 to v suma=0 for j <-1 to l suma = suma + mi[i,j] vec[i] = suma j

for i = 1 to l suma = 0 for j:=1 to v

mi[j,i]=1

V suma:= suma + 1

k:=j;

suma=1

V vec[k]:=vec[k] + 1;

F j

for i:=1 to v

vec[i]>ggi nc F i

V gginc:=vec[i];

Fin

f.
procedure f2(v,l:integer; mi:txy; var lpinc:integer);

lpinc:=0 a:=1 repetidos[a]:=0

for i:=1 to l-1

sw:=0

for j:=1 to v

mi[j,i]=1

sw=0 sw:=2 au2:=j au1:=j; sw:=1

j j suma:=0 for k:=i+1 to l band:=true for p:=1 to a do

repetidos[p]=k band:=false

(band) (sw=2) band1:=true ((mi[au1,k]=1)and (mi[au2,k]=1)) for q:=1 to V do suma:=suma+1 ((mi[q,k]=1)and(q<>au1)) band1:=false a:=a+1 repetidos[a]:=0; ((mi[au1,k]=1)and (band1)) suma:=suma+1; repetidos[a]:=k a:=a+1 repetidos[a]:=k

p k lpinc:=lpinc+suma; FIN

o. Determinar si tiene camino Hamiltoniano Procedure CH (grad:Tvector ; n:integer; var ch :booleam i 1 , n-1 , 1 j n +1 , n ,1 K grad (x) + grad (y) si K< n-1 break

J< n break

I=n j n +1 , n ,1 j n +1 , n ,1 K grad (x) + grad (y) no K< n-1 Ch true Cumple para cualquiera Ch true I J si

Ch false

Fin ch

También podría gustarte