Ver Mensaje Individual
  #10 (permalink)  
Antiguo 26/03/2012, 20:51
darkChild
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 7 meses
Puntos: 12
Respuesta: bisqueda de una fila y columna en una matriz

Si si lo que hice es algo asi


Código C++:
Ver original
  1. #include "busqueda.h"
  2.  
  3. using namespace std;
  4.  
  5. /*Metodo que al recibir
  6.  * un argumento de tipo string
  7.  * identifica si la busqueda
  8.  * es por columna o fila
  9.  * utiliza un corte de control que identifica
  10.  * si hay cemento en caso contrario devuelve TRUE
  11.  * */
  12. bool buscarCaminoTierra(int matriz[MAXIMO][MAXIMO],int ultpos,int indice,string tipoBusqueda){
  13.  
  14.     bool encontrado  = true;
  15.     bool esCemento = false;
  16.  
  17.     if(tipoBusqueda == FILA){
  18.         for(int i = 0;i < ultpos && !esCemento;i++){
  19.             cout<<"Buscando camino de tierra"<<endl;
  20.             if(matriz[indice][i] == CEMENTO)
  21.                 esCemento = true;
  22.         }
  23.     }else
  24.         for(int i = 0;i < ultpos && !esCemento;i++){
  25.             cout<<"Buscando camino de tierra"<<endl;
  26.             if(matriz[i][indice] == CEMENTO)
  27.                 esCemento = true;
  28.         }
  29.  
  30.     return (encontrado = esCemento == false ? encontrado : !encontrado);
  31.  
  32. }
  33. /*Metodo que al recibir
  34.  * un argumento de tipo string
  35.  * identifica si la busqueda
  36.  * es por columna o fila
  37.  * utiliza un corte de control que identifica
  38.  * si hay tierra en caso contrario devuelve TRUE
  39.  * */
  40. bool buscarCaminoCemento(int matriz[MAXIMO][MAXIMO],int ultpos,int indice,string tipoBusqueda){
  41.  
  42.     bool encontrado  = true;
  43.     bool esTierra = false;
  44.  
  45.     if(tipoBusqueda == FILA){
  46.         for(int i = 0;i < ultpos && !esTierra;i++){
  47.             cout<<"Buscando camino de cemento"<<endl;
  48.             if(matriz[indice][i] == TIERRA)
  49.                 esTierra = true;
  50.         }
  51.     }else
  52.         for(int i = 0;i < ultpos && !esTierra;i++){
  53.             cout<<"Buscando camino de cemento"<<endl;
  54.             if(matriz[i][indice] == TIERRA)
  55.                 esTierra = true;
  56.         }
  57.  
  58.     return (encontrado = esTierra == false ? encontrado : !encontrado);
  59.  
  60. }
  61. /*Busca por fila tanto tierra como cemento
  62.  * si encuentra una ocurrencia de ambos sale caso
  63.  * contrario sigue la busqueda
  64.  * */
  65. void buscarCaminoFila(int matriz[MAXIMO][MAXIMO],int rangoFila,int rangoCol){
  66.  
  67.     cout<<BUSQUEDA_FILA<<endl;
  68.     bool buscoCemento = false;bool buscoTierra = false;
  69.     int encontroCemento = 0;
  70.     int encontroTierra  = 0;
  71.     for(int i = 0;(!encontroCemento == 1 || !encontroTierra == 1) && i < rangoFila ;i++){
  72.         buscoCemento = buscarCaminoCemento(matriz,rangoCol,i,FILA) == true ? true : false;
  73.         controloBusqueda(buscoCemento,buscoTierra,encontroCemento,encontroTierra,i,FILA);
  74.         buscoTierra  = buscarCaminoTierra(matriz,rangoCol,i,FILA)  == true ? true : false;
  75.         controloBusqueda(buscoCemento,buscoTierra,encontroCemento,encontroTierra,i,FILA);
  76.     }
  77. }
  78. /*Busca por columna tanto tierra como cemento
  79.  * si encuentra una ocurrencia de ambos sale caso
  80.  * contrario sigue la busqueda
  81.  * */
  82. void buscarCaminoColumna(int matriz[MAXIMO][MAXIMO],int rangoFila,int rangoCol){
  83.  
  84.     cout<<BUSQUEDA_COLUMNA<<endl;
  85.     bool buscoCemento,buscoTierra;
  86.     int encontroCemento = 0;
  87.     int encontroTierra  = 0;
  88.     for(int i = 0;(!encontroCemento == 1 || !encontroTierra == 1) && i < rangoCol ;i++){
  89.         buscoTierra  = buscarCaminoTierra(matriz,rangoFila,i,COL)  == true ? true : false;
  90.         controloBusqueda(buscoCemento,buscoTierra,encontroCemento,encontroTierra,i,COL);
  91.         buscoCemento = buscarCaminoCemento(matriz,rangoFila,i,COL) == true ? true : false;
  92.         controloBusqueda(buscoCemento,buscoTierra,encontroCemento,encontroTierra,i,COL);
  93.     }
  94. }
  95. /*Se encarga de verificar si hay un
  96.  * suceso de cemento o tierra recibiendo un parametro
  97.  * bool de ambos e incrementa al recibir un TRUE de uno
  98.  * de los dos o ambos e imprime el resultado*/
  99. void controloBusqueda(bool buscoCemento,bool buscoTierra,int &encontroCemento,int &encontroTierra,int indice,string filaCol){
  100.  
  101.     if(buscoCemento || buscoTierra){
  102.         if(buscoCemento){
  103.             encontroCemento++;
  104.             printResult(indice,encontroCemento,CEMENTO,filaCol);
  105.         }
  106.         if(buscoTierra){
  107.             encontroTierra++;
  108.             printResult(indice,encontroTierra,TIERRA,filaCol);
  109.         }
  110.     }else
  111.         printResult(indice,encontroTierra,TIERRA,filaCol);
  112. }
  113.  
  114.  
  115. void buscarCaminos(int matriz[MAXIMO][MAXIMO],int rangoFila,int rangoCol){
  116.  
  117.     buscarCaminoFila(matriz,rangoFila,rangoCol);
  118.     buscarCaminoColumna(matriz,rangoFila,rangoCol);
  119.     mostrarResultado(matriz,rangoFila,rangoCol);
  120.  
  121. }
  122.  
  123. /*Formatea la salida por consola
  124.  * identificando si es fila o columna */
  125. void printResult(int fila,int encontro,int tipo,string filaCol){
  126.  
  127.     stringstream ss;
  128.     string frase;
  129.     ss<<++fila;
  130.     frase = filaCol == COL ? "Encontro en " + COL + " " + ss.str() : "Encontro en " + FILA + " " +ss.str();
  131.     frase = tipo == CEMENTO ? frase + " Cemento": frase + " Tierra";
  132.     frase = encontro == 1 ? frase : "No encontro";
  133.     cout<<frase<<endl;
  134. }

digan si se puede mejorar gracias !!!