1.

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS09
* Problem: 439 Knight Moves
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=6&problem=380&mosmsg=Submission+received+with+ID+7685367
*
* @author Stefan Gohlke
* @version 1.0, 01/13/2010
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 1.560
*/

package knigthmoves_acc;

import java.util.Scanner;

public class Main {
public static int[][] spielfeld;


public static void main(String[] args) {
longestPath();
}

public static void longestPath() {

Scanner scanner = new Scanner(System.in);

while(scanner.hasNext()) {

String von = scanner.next();
String bis = scanner.next();

spielfeld = new int [8][8];

int vonX, vonY, bisX,bisY;
vonX = von.charAt(0) - 97; //char[0]: Buchstabe
vonY = von.charAt(1) - 49; //char[1]: Zahl

bisX = bis.charAt(0) - 97; //char[0]: Buchstabe
bisY = bis.charAt(1) - 49; //char[1]: Zahl

if(vonX == bisX && vonY == bisY) System.out.println("To get from "+ von + " to "+ bis + " takes 0 knight moves.");
else
{
springe(vonX, vonY, 0);
System.out.println("To get from "+ von + " to "+ bis + " takes "+ spielfeld[bisX][bisY] + " knight moves.");
}
}
}

private static void springe(int vonX, int vonY, int getSpielzuege) {

if (vonX >= 0 && vonY >= 0 && vonX <= 7 && vonY <= 7)
{
if (spielfeld[vonX][vonY] > getSpielzuege || spielfeld[vonX][vonY]==0)
{
spielfeld[vonX][vonY] = getSpielzuege;
getSpielzuege++;
springe(vonX - 1, vonY-2, getSpielzuege);
springe(vonX + 1, vonY-2, getSpielzuege);
springe(vonX + 2, vonY-1, getSpielzuege);
springe(vonX + 2, vonY+1, getSpielzuege);
springe(vonX + 1, vonY+2, getSpielzuege);
springe(vonX - 1, vonY+2, getSpielzuege);
springe(vonX - 2, vonY+1, getSpielzuege);
springe(vonX - 2, vonY-1, getSpielzuege);
}
}
}
}