Você está na página 1de 5

public class Dispersa

public static void Main(string[] args)


{
matriz a = new matriz();

int fila, columna = 0;

Scanner x = new Scanner(System.in);

a.crear(2,3);
a.adicionar(2, 1, 1);
a.adicionar(3, 1, 2);
a.adicionar(4, 2, 2);
a.adicionar(5, 2, 3);

a.imprimir(a.m);

a.intercambiar_filas(a.m);
a.imprimir(a.m);
}

namespace dispersa
{
public class nodos
{
internal int fil;
internal int col;
internal int info;
internal nodos sigfil;
internal nodos sigcol;

internal nodos(int i, int f, int c)


{
this.info = i;
this.fil = f;
this.col = c;
this.sigfil = null;
this.sigcol = null;
}

public class matriz


{

internal nodos m;

internal virtual void crear(int f, int c)


{
m = new nodos(0, 0, 0);
m.sigfil = m;
m.sigcol = m;
int i = 1;
nodos q = m;
while (i <= f)
{
nodos nuevo = new nodos(0, i, 0);
q.sigfil = nuevo;
nuevo.sigcol = nuevo;
q = nuevo;
i++;
}

q.sigfil = m;
i = 1;
q = m;
while (i <= c)
{
nodos nuevo = new nodos(0, 0, i);
q.sigcol = nuevo;
nuevo.sigfil = nuevo;
q = nuevo;
i++;
}
q.sigcol = m;
}

internal virtual nodos arriba(int f, int c)


{
nodos aux = m.sigcol;
while (aux.col != c)
{
aux = aux.sigcol;
}
nodos aux1 = aux.sigfil;
nodos aux2 = aux1.sigfil;
while ((aux1.fil < f) && (aux2.fil != 0))
{
aux = aux1;
aux1 = aux1.sigfil;
aux2 = aux2.sigfil;
}
if (aux1.fil < f)
{
return aux1;
}
else
{
return aux;
}
}

internal virtual nodos izquierda(int f, int c)


{
nodos aux = m.sigfil;
while (aux.fil != f)
{
aux = aux.sigfil;
}
nodos aux1 = aux.sigcol;
nodos aux2 = aux1.sigcol;
while ((aux1.col < c) && (aux2.col != 0))
{
aux = aux1;
aux1 = aux1.sigcol;
aux2 = aux2.sigcol;
}
if (aux1.col < c)
{
return aux1;
}
else
{
return aux;
}
}

internal virtual void adicionar(int i, int f, int c)


{
nodos q = arriba(f, c);
nodos p = izquierda(f, c);
nodos nuevo = new nodos(i, f, c);
nuevo.sigfil = q.sigfil;
q.sigfil = nuevo;
nuevo.sigcol = p.sigcol;
p.sigcol = nuevo;
}

internal virtual void imprimir(nodos M)


{
nodos o;
int nca = 0, ncc = 0, nt = 0;
nodos e;
nodos aux = M.sigcol;
Console.Write(M.info + " ");
while (aux.col != M.col)
{
Console.Write(aux.col + " ");
aux = aux.sigcol;
}
Console.WriteLine("");
aux = M.sigfil;

while (aux.fil != M.fil)


{
Console.Write(aux.fil + " ");
o = aux;
e = aux.sigcol;

while (o != e)
{
int nc = e.col;
nt = nc;
int nf = e.fil;
if (nf == nca)
{
nc = nc - ncc;
}
for (int i = 1; i < nc; i++)
{
Console.Write(" ");
}
Console.Write(e.info + " ");
e = e.sigcol;
nca = nf;
ncc = nt;
}
Console.WriteLine(" ");
aux = aux.sigfil;
}
}

internal virtual void intercambiar_filas(nodos M)


{
nodos aux1 = M.sigfil, aux2 = M.sigcol;
nodos n1, n2, n3;
int fil = 0, col = 0, x;
while (aux1 != M)
{
fil++;
aux1 = aux1.sigfil;
}
while (aux2 != M)
{
col++;
aux2 = aux2.sigcol;
}
aux1 = M.sigfil;
aux2 = M.sigfil;
while (aux1.fil != 1)
{
aux1 = aux1.sigfil;
}
while (aux2.fil != 2)
{
aux2 = aux2.sigfil;
}
n1 = aux1;
n2 = aux2;
for (int i = 1; i <= col; i++)
{
if (n1.sigcol.col == i && n2.sigcol.col == i)
{

x = n1.sigcol.info;
n1.sigcol.info = n2.sigcol.info;
n2.sigcol.info = x;
n1 = n1.sigcol;
n2 = n2.sigcol;
}
else
{
if (n1.sigcol.col == i)
{
n3 = new nodos(n1.sigcol.info, 2, i);
n3.sigcol = n2.sigcol;
n3.sigfil = n1.sigcol.sigfil;
n2.sigcol = n3;
n1.sigcol = n1.sigcol.sigcol;
n3 = M.sigcol;
while (n3.col < i)
{
n3 = n3.sigcol;
}
n3.sigfil = n2.sigcol;
n2 = n2.sigcol;
}
else
{
if (n2.sigcol.col == i)
{
n2 = n2.sigcol;
}

}
}
}
}
}

Você também pode gostar