hdu 1372

来源:互联网 发布:fifa online3数据库15 编辑:程序博客网 时间:2024/04/30 09:02

写了太多的dfs,明天就要考试了,写个bfs。好久没有写bfs,有些细节都不熟悉了。

本题的意思就是在8X8的棋盘,马走日。其实就是迷宫的变形。不难。

import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;class Point{int x, y;int step;boolean vis;public Point(int x,int y){this.x=x;this.y=y;}}public class Main{static int dir[][]=new int[][]{{-2,1},{-2,-1},{2,1},{2,-1},{-1,2},{-1,-2},{1,2},{1,-2}};static char start[],end[];static int bfs(Point sor, Point aim){Queue<Point> q=new LinkedList<Point>();q.offer(sor);while(!q.isEmpty()){Point pre=q.poll();if(pre.x==aim.x && pre.y==aim.y){return pre.step;}for(int i=0;i<8;i++){int x=pre.x+dir[i][0];int y=pre.y+dir[i][1];Point after=new Point(x, y);if(x>=0 && x<8  && y>=0 && y<8 && !after.vis){after.step=pre.step+1;after.vis=true;q.offer(after);}}}return 0;}public static void main(String[] args){Scanner cin=new Scanner(System.in);Point sor,aim;while(cin.hasNext()){start=cin.next().toCharArray();end=cin.next().toCharArray();sor=new Point(start[0]-'a',start[1]-'1');aim=new Point(end[0]-'a',end[1]-'1');int len=bfs(sor,aim);System.out.printf("To get from %s to %s takes %d knight moves.\r\n",String.valueOf(start),String.valueOf(end),len);}}}

记住java换行时候用“\r\n”,第一次就是因为这个PE了。

刚过9点,呵呵,再熟悉一下已经陌生的api。

祝自己明天好运!得意

 

原创粉丝点击