<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: floyd code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 07 Sep 2008 08:03:42 GMT</pubDate>
    <description>DZone Snippets: floyd code</description>
    <item>
      <title>All Sources Shortest Path: The Floyd-Warshall Algorithm</title>
      <link>http://snippets.dzone.com/posts/show/4759</link>
      <description>This is a straightforward implementation of the &lt;a href="http://en.wikipedia.org/wiki/Floyd-Warshall_algorithm"&gt;Floyd-Warshall algorithm&lt;/a&gt; for finding the shortest path between all nodes of a graph.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A more detailed explanation is given &lt;a href="http://compprog.wordpress.com/2007/11/15/all-sources-shortest-path-the-floyd-warshall-algorithm/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int n; /* Then number of nodes */&lt;br /&gt;int dist[16][16]; /* dist[i][j] is the length of the edge between i and j if&lt;br /&gt;			it exists, or 0 if it does not */&lt;br /&gt;&lt;br /&gt;void printDist() {&lt;br /&gt;	int i, j;&lt;br /&gt;	printf("    ");&lt;br /&gt;	for (i = 0; i &lt; n; ++i)&lt;br /&gt;		printf("%4c", 'A' + i);&lt;br /&gt;	printf("\n");&lt;br /&gt;	for (i = 0; i &lt; n; ++i) {&lt;br /&gt;		printf("%4c", 'A' + i);&lt;br /&gt;		for (j = 0; j &lt; n; ++j)&lt;br /&gt;			printf("%4d", dist[i][j]);&lt;br /&gt;		printf("\n");&lt;br /&gt;	}&lt;br /&gt;	printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;	floyd_warshall()&lt;br /&gt;&lt;br /&gt;	after calling this function dist[i][j] will the the minimum distance&lt;br /&gt;	between i and j if it exists (i.e. if there's a path between i and j)&lt;br /&gt;	or 0, otherwise&lt;br /&gt;*/&lt;br /&gt;void floyd_warshall() {&lt;br /&gt;	int i, j, k;&lt;br /&gt;	for (k = 0; k &lt; n; ++k) {&lt;br /&gt;		printDist();&lt;br /&gt;		for (i = 0; i &lt; n; ++i)&lt;br /&gt;			for (j = 0; j &lt; n; ++j)&lt;br /&gt;				/* If i and j are different nodes and if &lt;br /&gt;					the paths between i and k and between&lt;br /&gt;					k and j exist, do */&lt;br /&gt;				if ((dist[i][k] * dist[k][j] != 0) &amp;&amp; (i != j))&lt;br /&gt;					/* See if you can't get a shorter path&lt;br /&gt;						between i and j by interspacing&lt;br /&gt;						k somewhere along the current&lt;br /&gt;						path */&lt;br /&gt;					if ((dist[i][k] + dist[k][j] &lt; dist[i][j]) ||&lt;br /&gt;						(dist[i][j] == 0))&lt;br /&gt;						dist[i][j] = dist[i][k] + dist[k][j];&lt;br /&gt;	}&lt;br /&gt;	printDist();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt;	FILE *fin = fopen("dist.txt", "r");&lt;br /&gt;	fscanf(fin, "%d", &amp;n);&lt;br /&gt;	int i, j;&lt;br /&gt;	for (i = 0; i &lt; n; ++i)&lt;br /&gt;		for (j = 0; j &lt; n; ++j)&lt;br /&gt;			fscanf(fin, "%d", &amp;dist[i][j]);&lt;br /&gt;	fclose(fin);&lt;br /&gt;&lt;br /&gt;	floyd_warshall();&lt;br /&gt;&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Nov 2007 16:19:25 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4759</guid>
      <author>scvalex (Alexandru Scvortov)</author>
    </item>
    <item>
      <title>Camino mas corto</title>
      <link>http://snippets.dzone.com/posts/show/2660</link>
      <description>Ejemplo en java del algoritmo para hallar el camino mas corto de un grafo. se implementa el algoritmo de floyd&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;public final class Grafo {&lt;br /&gt;&lt;br /&gt;	private int nnodos;&lt;br /&gt;&lt;br /&gt;	private int nodos[][][];&lt;br /&gt;&lt;br /&gt;	private char nombres[];&lt;br /&gt;&lt;br /&gt;	Grafo(int n) {&lt;br /&gt;		this.nnodos = n;&lt;br /&gt;		this.nodos = new int[nnodos][nnodos][2];&lt;br /&gt;		this.nombres = new char[nnodos];&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void ingresarArco(int n1, int n2, int peso) {&lt;br /&gt;		this.nodos[n1][n2][0] = peso;&lt;br /&gt;		this.nodos[n2][n1][0] = peso;&lt;br /&gt;		this.nodos[n1][n2][1] = n1;&lt;br /&gt;		this.nodos[n2][n1][1] = n2;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void ingresarNombre(int nodo, char letra) {&lt;br /&gt;		this.nombres[nodo] = letra;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void calcular() {&lt;br /&gt;		int i, j, k;&lt;br /&gt;		for (i = 0; i &lt; this.nnodos; i++) {&lt;br /&gt;			for (j = 0; j &lt; this.nnodos; j++) {&lt;br /&gt;				for (k = 0; k &lt; this.nnodos; k++) {&lt;br /&gt;					if (this.nodos[i][k][0] + this.nodos[k][j][0] &lt; this.nodos[i][j][0]) {&lt;br /&gt;						this.nodos[i][j][0] = this.nodos[i][k][0]&lt;br /&gt;								+ this.nodos[k][j][0];&lt;br /&gt;						this.nodos[i][j][1] = k;&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public int pesominimo(int org, int des) {&lt;br /&gt;		return this.nodos[org][des][0];&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public String caminocorto(int org, int des) {&lt;br /&gt;		String cam;&lt;br /&gt;		if (org == des) {&lt;br /&gt;			cam = "-&gt;" + nombres[org];&lt;br /&gt;		} else {&lt;br /&gt;			cam = caminocorto(org, this.nodos[org][des][1]) + "-&gt;"&lt;br /&gt;					+ nombres[des];&lt;br /&gt;		}&lt;br /&gt;		return cam;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public char getNombre(int nodo) {&lt;br /&gt;		return this.nombres[nodo];&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static void main(String args[]) throws IOException {&lt;br /&gt;		Grafo g;&lt;br /&gt;&lt;br /&gt;		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));&lt;br /&gt;		String temp;&lt;br /&gt;		int res;&lt;br /&gt;&lt;br /&gt;		System.out.println("Entre el numero de nodos del grafo:\n");&lt;br /&gt;		temp = br.readLine();&lt;br /&gt;		res = Integer.parseInt(temp);&lt;br /&gt;&lt;br /&gt;		g = new Grafo(res);&lt;br /&gt;&lt;br /&gt;		for (int i = 0; i &lt; res; i++) {&lt;br /&gt;			System.out.println("Cual es el nombre del nodo [" + (i + 1)&lt;br /&gt;					+ "]:\n");&lt;br /&gt;			temp = br.readLine();&lt;br /&gt;			g.ingresarNombre(i, temp.charAt(0));&lt;br /&gt;		}&lt;br /&gt;		for (int i = 0; i &lt; res; i++) {&lt;br /&gt;			for (int j = 0; j &lt; res; j++) {&lt;br /&gt;				if (i &lt; j) {&lt;br /&gt;					System.out.println("El nodo " + g.getNombre(i)&lt;br /&gt;							+ " esta conectado con el nodo " + g.getNombre(j)&lt;br /&gt;							+ " (s/n)\n");&lt;br /&gt;					temp = br.readLine();&lt;br /&gt;					if (temp.charAt(0) == 's') {&lt;br /&gt;						int peso;&lt;br /&gt;						System.out.println("Cual es el peso del arco:\n");&lt;br /&gt;						temp = br.readLine();&lt;br /&gt;						peso = Integer.parseInt(temp);&lt;br /&gt;						g.ingresarArco(i, j, peso);&lt;br /&gt;					} else {&lt;br /&gt;						g.ingresarArco(i, j, 10000);&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		g.calcular();&lt;br /&gt;		for (int i = 0; i &lt; res; i++) {&lt;br /&gt;			for (int j = 0; j &lt; res; j++) {&lt;br /&gt;				if (i &gt; j) {&lt;br /&gt;					System.out.println("El camino mas corto entre los nodos:"&lt;br /&gt;							+ g.getNombre(i) + "-" + g.getNombre(j) + " es: \n"&lt;br /&gt;							+ g.caminocorto(i, j) + " y su peso es: "&lt;br /&gt;							+ g.pesominimo(i, j));&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 22 Sep 2006 20:15:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2660</guid>
      <author>jcongote (John Edgar Congote Calle)</author>
    </item>
  </channel>
</rss>
