<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: cpm code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Tue, 07 Oct 2008 11:04:11 GMT</pubDate>
    <description>DZone Snippets: cpm code</description>
    <item>
      <title>PERT CPM</title>
      <link>http://snippets.dzone.com/posts/show/2672</link>
      <description>Implementacion en java de un modelo PERT_CPM&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;import java.util.StringTokenizer;&lt;br /&gt;&lt;br /&gt;public class Proyecto {&lt;br /&gt;&lt;br /&gt;	/**&lt;br /&gt;	 * @param args&lt;br /&gt;	 */&lt;br /&gt;	public static void main(String[] args) {&lt;br /&gt;		String texto = null;&lt;br /&gt;		int n = 0, t = 0;&lt;br /&gt;		Tarea tareas[] = null, inicio = null, fin = null;&lt;br /&gt;&lt;br /&gt;		try {&lt;br /&gt;			BufferedReader in = new BufferedReader(new InputStreamReader(&lt;br /&gt;					System.in));&lt;br /&gt;			texto = in.readLine();&lt;br /&gt;			n = Integer.parseInt(texto);&lt;br /&gt;&lt;br /&gt;			tareas = new Tarea[n];&lt;br /&gt;			inicio = new TareaInicio();&lt;br /&gt;			fin = new TareaFinal();&lt;br /&gt;			inicio.setNombre("Inicio");&lt;br /&gt;			inicio.setTiempo(0);&lt;br /&gt;			fin.setNombre("Fin");&lt;br /&gt;			fin.setTiempo(0);&lt;br /&gt;&lt;br /&gt;			for (int i = 0; i &lt; n; i++) {&lt;br /&gt;				texto = in.readLine();&lt;br /&gt;				tareas[i] = new Tarea();&lt;br /&gt;				StringTokenizer st = new StringTokenizer(texto, ",");&lt;br /&gt;				String nombre, tipo, tiempo;&lt;br /&gt;				nombre = st.nextToken();&lt;br /&gt;				tipo = st.nextToken();&lt;br /&gt;				tareas[i].setNombre(nombre);&lt;br /&gt;				if (tipo.equals("F")) {&lt;br /&gt;					tiempo = st.nextToken();&lt;br /&gt;					tareas[i].setTiempo(Integer.parseInt(tiempo));&lt;br /&gt;				} else if (tipo.equals("A") || tipo.equals("P")) {&lt;br /&gt;					tareas[i].setTiempo(0);&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			texto = in.readLine();&lt;br /&gt;			t = Integer.parseInt(texto);&lt;br /&gt;			for (int i = 0; i &lt; t; i++) {&lt;br /&gt;				String org, des;&lt;br /&gt;				Tarea torg = null, tdes = null;&lt;br /&gt;				texto = in.readLine();&lt;br /&gt;				StringTokenizer st = new StringTokenizer(texto, ",");&lt;br /&gt;				org = st.nextToken();&lt;br /&gt;				des = st.nextToken();&lt;br /&gt;				if (org.equals(inicio.getNombre())) {&lt;br /&gt;					torg = inicio;&lt;br /&gt;				} else {&lt;br /&gt;					for (int j = 0; j &lt; n; j++) {&lt;br /&gt;						if (org.equals(tareas[j].getNombre())) {&lt;br /&gt;							torg = tareas[j];&lt;br /&gt;							break;&lt;br /&gt;						}&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;&lt;br /&gt;				if (des.equals(fin.getNombre())) {&lt;br /&gt;					tdes = fin;&lt;br /&gt;				} else {&lt;br /&gt;					for (int j = 0; j &lt; n; j++) {&lt;br /&gt;						if (des.equals(tareas[j].getNombre())) {&lt;br /&gt;							tdes = tareas[j];&lt;br /&gt;							break;&lt;br /&gt;						}&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;				if (torg == null || tdes == null) {&lt;br /&gt;									}&lt;br /&gt;				torg.addConcecuente(tdes);&lt;br /&gt;				tdes.addAntecedente(torg);&lt;br /&gt;			}&lt;br /&gt;		} catch (IOException e) {&lt;br /&gt;			System.out.println("Error en entrada de datos");&lt;br /&gt;		}&lt;br /&gt;		fin.terminacionRapida();&lt;br /&gt;		inicio.inicioTardio();&lt;br /&gt;		System.out.print("Ruta Critica: Inicio, ");&lt;br /&gt;		for (int i = 0; i &lt; n; i++) {&lt;br /&gt;			if (tareas[i].isCritico()) {&lt;br /&gt;				System.out.print(tareas[i].getNombre() + ", ");&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		System.out.print(" Fin\n");&lt;br /&gt;		System.out.println("Tiempo: " + fin.inicioTardio());&lt;br /&gt;		System.out.println(inicio.getNombre() + " holgura: "&lt;br /&gt;				+ inicio.getHolgura());&lt;br /&gt;		for (int i = 0; i &lt; n; i++) {&lt;br /&gt;			System.out.println(tareas[i].getNombre() + " holgura: "&lt;br /&gt;					+ tareas[i].getHolgura());&lt;br /&gt;		}&lt;br /&gt;		System.out.println(fin.getNombre() + " holgura: " + fin.getHolgura());&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;////////////////////////&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;public class Tarea {&lt;br /&gt;	private String nombre;&lt;br /&gt;	private int tiempo;&lt;br /&gt;	private int holgura;&lt;br /&gt;	private ArrayList antecedentes;&lt;br /&gt;	private ArrayList consecuentes;&lt;br /&gt;	&lt;br /&gt;	private int iniciomasrapido;&lt;br /&gt;	private int terminacionmasrapida;&lt;br /&gt;	private int iniciomastarde;&lt;br /&gt;	private int terminaciontarde;&lt;br /&gt;&lt;br /&gt;	Tarea(){&lt;br /&gt;		this.antecedentes = new ArrayList();&lt;br /&gt;		this.consecuentes = new ArrayList();&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	void setNombre(String nombre){&lt;br /&gt;		this.nombre=nombre;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	void setTiempo(int tiempo){&lt;br /&gt;		this.tiempo=tiempo;		&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public String getNombre() {&lt;br /&gt;		return nombre;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public int getTiempo() {&lt;br /&gt;		return tiempo;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public int terminacionRapida(){&lt;br /&gt;		this.iniciomasrapido=0;&lt;br /&gt;		for (int i = 0; i &lt; antecedentes.size(); i++) {			&lt;br /&gt;			if(((Tarea)antecedentes.get(i)).terminacionRapida()&gt;this.iniciomasrapido){&lt;br /&gt;				this.iniciomasrapido=((Tarea)antecedentes.get(i)).terminacionRapida();				&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		this.terminacionmasrapida=this.iniciomasrapido+this.tiempo;&lt;br /&gt;		return (this.terminacionmasrapida);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public int inicioTardio(){&lt;br /&gt;		this.terminaciontarde=999999;&lt;br /&gt;		for (int i = 0; i &lt; consecuentes.size(); i++) {&lt;br /&gt;			if(((Tarea)consecuentes.get(i)).inicioTardio()&lt;this.terminaciontarde){&lt;br /&gt;				this.terminaciontarde=((Tarea)consecuentes.get(i)).inicioTardio();				&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		this.iniciomastarde=this.terminaciontarde-this.tiempo;&lt;br /&gt;		return (this.iniciomastarde);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	int getHolgura(){&lt;br /&gt;		this.holgura=this.iniciomastarde-this.iniciomasrapido;&lt;br /&gt;		return this.holgura;&lt;br /&gt;	}	&lt;br /&gt;	&lt;br /&gt;	@SuppressWarnings("unchecked")&lt;br /&gt;	public void addAntecedente(Tarea t){&lt;br /&gt;		this.antecedentes.add(t);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	@SuppressWarnings("unchecked")&lt;br /&gt;	public void addConcecuente(Tarea t){&lt;br /&gt;		this.consecuentes.add(t);		&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	boolean isCritico(){&lt;br /&gt;		return (this.getHolgura()==0);		&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/////////////////////////&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class TareaFinal extends Tarea {&lt;br /&gt;	&lt;br /&gt;&lt;br /&gt;	public int inicioTardio(){&lt;br /&gt;		return this.terminacionRapida();		&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public int getHolgura(){&lt;br /&gt;		return 0;		&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;///////////////////&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class TareaInicio extends Tarea {&lt;br /&gt;	&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	public int terminacionRapida(){&lt;br /&gt;		return 0;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public int getHolgura(){&lt;br /&gt;		return 0;		&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 21:25:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2672</guid>
      <author>jcongote (John Edgar Congote Calle)</author>
    </item>
  </channel>
</rss>
