usaco 5.1.2 Snail Trails

来源:互联网 发布:centos 6.5 squid 编辑:程序博客网 时间:2024/05/16 14:14
/*ID: daniel.20LANG: JAVATASK: snail*/import java.util.*;import java.io.*;class problem2{    StringBuilder sb = new StringBuilder();    long start = System.currentTimeMillis();    int n,b;    int arr[][];    int max=-1;    int dir[][] = {{0,1},{1,0},{0,-1},{-1,0}};    boolean vis[][];    void solver() throws IOException{          BufferedReader reader = new BufferedReader(new FileReader("snail.in"));        String tmp = reader.readLine();        StringTokenizer st = new StringTokenizer(tmp);        n=Integer.valueOf(st.nextToken());        b=Integer.valueOf(st.nextToken());        arr=new int[n][n];        vis=new boolean[n][n];        for(int i=0;i<b;i++){            tmp = reader.readLine();            String si = tmp.substring(1);            arr[Integer.valueOf(si)-1][tmp.charAt(0)-'A']=1;        }        vis[0][0] = true;        dfs(0,0,1,0);        dfs(0,0,1,1);                PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("snail.out")));        sb.append(max);        System.out.println(sb.toString());        System.out.println();        pw.println(sb.toString());        pw.close();        System.out.println("$:"+(System.currentTimeMillis()-start));        System.exit(0);            }    void dfs(int x, int y, int count, int d){        if(count>max){            //System.out.println(x+" "+y+" "+count);            max=count;        }        int nx=x+dir[d][0];        int ny=y+dir[d][1];        if(nx<0||ny<0||nx>=n||ny>=n||arr[nx][ny]==1){            int tmp[] = new int[2];            if(d==0||d==2) {                tmp[0]=3; tmp[1]=1;            }            else{                tmp[0]=0; tmp[1]=2;            }            for(int i=0;i<2;i++){                nx = x+dir[tmp[i]][0];                ny = y+dir[tmp[i]][1];                if(nx>=0&&ny>=0&&nx<n&&ny<n&&arr[nx][ny]==0&&!vis[nx][ny]) {                    vis[nx][ny]=true;                    dfs(nx,ny,count+1,tmp[i]);                    vis[nx][ny]=false;                }                            }        }else{            if(nx>=0&&ny>=0&&nx<n&&ny<n&&arr[nx][ny]==0&&!vis[nx][ny]) {                vis[nx][ny]=true;                dfs(nx,ny,count+1,d);                vis[nx][ny]=false;            }        }    }}public class snail {    public static void main(String[] args) throws Exception {        problem2 p = new problem2();        p.solver();    }}


这题是贪吃蛇,但是不知道为什么会放到第五章来,最多第三章的难度了

直接DFS爆搜

0 0
原创粉丝点击