import java.io.*;
public class BusquedaPalabras
{
private static final int MAX_FILAS = 10;
private static final int MAX_COLUMNAS = 10;
private static final int MAX_PALABRAS = 100000;
private int filas;
private int columnas;
private int numPalbras;
private char sopa[][]= new char[MAX_FILAS][MAX_COLUMNAS];
public BusquedaPalabras()
{
sopaStream = abreFichero("introduzca Fichero de la Sopa");
palabraStream = abreFichero("y el del diccionario");
leeSopa();
leePalabras();
}
{
do
{
System.
out.
println(mensaje
+ ":");
try
{
nombreFichero=in.readLine();
if(nombreFichero==null)
}
{System.
err.
println("No se puede abrir"+nombreFichero
);} }while(fichEntrada==null);
System.
out.
println("Abierto" + nombreFichero
); return fichEntrada;
}
private void leePalabras()
{
int numPalabras=0;
try
{
while((palabras[numPalabras]= palabraStream.readLine())!=null)
{
if(numPalabras!=0 && palabras[numPalbras].compareTo(palabras[numPalbras-1])<0)
{
System.
err.
println("El Diccionario no esta"+"ordenado-saliendo"); continue;
}
else if(++numPalbras>=MAX_PALABRAS)
break;
}
if(palabraStream.ready())
System.
err.
println("Aviso: no se han leido los "+"datos-incremente MAX_PALABRAS"); }
{}
}
private void leeSopa()
{
try {
int i=0;
while((unaLinea = sopaStream.readLine())!=null){
String t
= unaLinea.
replace(" ",
""); columnas = t.length();
for(int j=0;j<columnas;j++)
sopa[i][j]=t.charAt(j);
i++;
}
}
e.printStackTrace();
}
}
/*
private void leeSopa()
{
String unaLinea;
try
{
unaLinea=sopaStream.readLine();
if(unaLinea==null)
{
filas=0;
return;
}
columnas=unaLinea.length();
for(int i=0;i<columnas;i++)
sopa[0][i]=unaLinea.charAt(i);
for(filas=1;
(unaLinea=sopaStream.readLine())!=null;filas++)
{
if(unaLinea.length()!=columnas)
System.err.println("La sopa es incorrecta");
for(int i=0;i<columnas;i++)
sopa[filas][i]=unaLinea.charAt(i);
}
}
catch(IOException e)
{}
}
*/
private int resolverDireccion(int filaBase,int colBase,int filaDelta,int colDelta)
{
int numPal=0;
int resultadoBusqueda;
secuencia+=sopa[filaBase][colBase];
for(int i=filaBase+filaDelta,j=colBase+colDelta;
i>=0&& j>=0 && i<filas && j< columnas;
i+=filaDelta,j+=colDelta)
{
secuencia+=sopa[j];
resultadoBusqueda=busquedaPrefijo(palabras,secuencia,numPal);
if(!palabras[resultadoBusqueda].startsWith(secuencia))
break;
if(palabras[resultadoBusqueda].equals(secuencia) )
{
numPal++;
System.
out.
println("Encontrada"+secuencia
+ "de" + filaBase
+ "" + colBase
+ "a" + i + "" + j);
}
}
return numPal;
}
private static int busquedaPrefijo
(String [] a,
String x,
int n
) {
int inf=0;
int sup=n-1;
while(inf<sup)
{
int med=(inf+sup)/2;
if(a[med].compareTo(x)<0)
{
inf=med+1;
}
else
sup=med;
}
return inf;
}
public int resolverSopa()
{
int numPal=0;
for(int f=0;f<filas;f++)
{
for(int c=0;c<columnas;c++)
{
for(int df=-1;df<=1;df++)
{
for(int dc=-1;dc<=1;dc++)
{
if(df!=0 || dc!=0)
{numPal=numPal+resolverDireccion(f,c,df,dc);
}
}
}
}
}
return numPal;
}
}
/*Void main*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main
(String[] args
) {
BusquedaPalabras p=new BusquedaPalabras();
System.
out.
println("Resolviendo...."); p.resolverSopa();
}
}
[code=/java]