#1850: 找不到錯誤 卻WA 靈犬尋寶


morris1028 (碼畜)

學校 : 國立花蓮高級中學
編號 : 3529
來源 : [114.37.59.62]
最後登入時間 :
2021-07-12 19:00:43
b059. 4. 靈犬尋寶 -- 95學年度全國資訊學科能力競賽 | From: [118.161.208.147] | 發表日期 : 2009-04-26 11:16

#include<stdio.h>
#include<stdlib.h>
main()
{
 int n,time=0;
 while(scanf("%d",&n)==1)
  {
   time++;
   int map[106][106]={0},x,y;
   int a,b,c,d,startx,starty;
     for(a=0;a<=102;a++) /*建出牆壁-1 怕靈犬走出方格造成RE*/
      {
       map[0][a]=-1;map[a][0]=-1;
       map[1][a]=-1;map[a][1]=-1;
       map[2][a]=-1;map[a][2]=-1;
       map[103][a]=-1;map[a][103]=-1;
       map[104][a]=-1;map[a][104]=-1;
       map[105][a]=-1;map[a][105]=-1;
      }
    int ans=0;
    for(a=0;a<n;a++) { scanf("%d %d",&x,&y);map[x+3][y+3]=-1; }
    scanf("%d %d",&startx,&starty);
    scanf("%d %d",&x,&y); map[x+3][y+3]=-2;
    int queue[10001][2]={0},top=0;
    queue[0][0]=startx+3;queue[0][1]=starty+3;
    for(a=0;a<=top;a++) /*BFS*/
      {
       int nn=queue[a][0],mm=queue[a][1];
        if(map[nn+1][mm+3]==-2&&map[nn][mm+1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-1][mm+3]==-2&&map[nn][mm+1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-3][mm+1]==-2&&map[nn-1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-3][mm-1]==-2&&map[nn-1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-1][mm-3]==-2&&map[nn][mm-1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+1][mm-3]==-2&&map[nn][mm-1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+3][mm+1]==-2&&map[nn+1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+3][mm-1]==-2&&map[nn+1][mm]>=0) {ans+=map[nn][mm]+1;break;} 

        if(map[nn+1][mm+3]==0&&map[nn][mm+1]>=0) {map[nn+1][mm+3]+=map[nn][mm]+1;top++;queue[top][0]=nn+1;queue[top][1]=mm+3;}
        if(map[nn-1][mm+3]==0&&map[nn][mm+1]>=0) {map[nn-1][mm+3]+=map[nn][mm]+1;top++;queue[top][0]=nn-1;queue[top][1]=mm+3;}
        if(map[nn-3][mm+1]==0&&map[nn-1][mm]>=0) {map[nn-3][mm+1]+=map[nn][mm]+1;top++;queue[top][0]=nn-3;queue[top][1]=mm+1;}
        if(map[nn-3][mm-1]==0&&map[nn-1][mm]>=0) {map[nn-3][mm-1]+=map[nn][mm]+1;top++;queue[top][0]=nn-3;queue[top][1]=mm-1;}
        if(map[nn-1][mm-3]==0&&map[nn][mm-1]>=0) {map[nn-1][mm-3]+=map[nn][mm]+1;top++;queue[top][0]=nn-1;queue[top][1]=mm-3;}
        if(map[nn+1][mm-3]==0&&map[nn][mm-1]>=0) {map[nn+1][mm-3]+=map[nn][mm]+1;top++;queue[top][0]=nn+1;queue[top][1]=mm-3;}
        if(map[nn+3][mm+1]==0&&map[nn+1][mm]>=0) {map[nn+3][mm+1]+=map[nn][mm]+1;top++;queue[top][0]=nn+3;queue[top][1]=mm+1;}
        if(map[nn+3][mm-1]==0&&map[nn+1][mm]>=0) {map[nn+3][mm-1]+=map[nn][mm]+1;top++;queue[top][0]=nn+3;queue[top][1]=mm-1;}
      }     
    if(ans==0) printf("impossible\n") ;
    else printf("%d\n",ans);
  }
 return 0;
}

/*

1
4 3
4 4
3 1
1
4 3
4 4
5 1
1
5 4
4 4
7 5
1
5 4
4 4
7 3
1
4 5
4 4
3 7
1
4 5
4 4
5 7
1
3 4
4 4
1 5
1
3 4
4 4
1 3

*/

所有的方向都檢查過了 但是沒辦法通過@@?

 
#1851: Re:找不到錯誤 卻WA 靈犬尋寶


p16951695 (Dum-Dum)

學校 : 國立花蓮高級中學
編號 : 5058
來源 : [140.112.16.145]
最後登入時間 :
2015-10-14 11:19:42
b059. 4. 靈犬尋寶 -- 95學年度全國資訊學科能力競賽 | From: [118.161.208.147] | 發表日期 : 2009-04-26 11:28

#include
#include
main()
{
 int n,time=0;
 while(scanf("%d",&n)==1)
  {
   time++;
   int map[106][106]={0},x,y;
   int a,b,c,d,startx,starty;
     for(a=0;a<=102;a++) /*建出牆壁-1 怕靈犬走出方格造成RE*/
      {
       map[0][a]=-1;map[a][0]=-1;
       map[1][a]=-1;map[a][1]=-1;
       map[2][a]=-1;map[a][2]=-1;
       map[103][a]=-1;map[a][103]=-1;
       map[104][a]=-1;map[a][104]=-1;
       map[105][a]=-1;map[a][105]=-1;
      }
    int ans=0;
    for(a=0;a    scanf("%d %d",&startx,&starty);
    scanf("%d %d",&x,&y); map[x+3][y+3]=-2;
    int queue[10001][2]={0},top=0;
    queue[0][0]=startx+3;queue[0][1]=starty+3;
    for(a=0;a<=top;a++) /*BFS*/
      {
       int nn=queue[a][0],mm=queue[a][1];
        if(map[nn+1][mm+3]==-2&&map[nn][mm+1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-1][mm+3]==-2&&map[nn][mm+1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-3][mm+1]==-2&&map[nn-1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-3][mm-1]==-2&&map[nn-1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn-1][mm-3]==-2&&map[nn][mm-1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+1][mm-3]==-2&&map[nn][mm-1]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+3][mm+1]==-2&&map[nn+1][mm]>=0) {ans+=map[nn][mm]+1;break;}
        if(map[nn+3][mm-1]==-2&&map[nn+1][mm]>=0) {ans+=map[nn][mm]+1;break;} 

        if(map[nn+1][mm+3]==0&&map[nn][mm+1]>=0) {map[nn+1][mm+3]+=map[nn][mm]+1;top++;queue[top][0]=nn+1;queue[top][1]=mm+3;}
        if(map[nn-1][mm+3]==0&&map[nn][mm+1]>=0) {map[nn-1][mm+3]+=map[nn][mm]+1;top++;queue[top][0]=nn-1;queue[top][1]=mm+3;}
        if(map[nn-3][mm+1]==0&&map[nn-1][mm]>=0) {map[nn-3][mm+1]+=map[nn][mm]+1;top++;queue[top][0]=nn-3;queue[top][1]=mm+1;}
        if(map[nn-3][mm-1]==0&&map[nn-1][mm]>=0) {map[nn-3][mm-1]+=map[nn][mm]+1;top++;queue[top][0]=nn-3;queue[top][1]=mm-1;}
        if(map[nn-1][mm-3]==0&&map[nn][mm-1]>=0) {map[nn-1][mm-3]+=map[nn][mm]+1;top++;queue[top][0]=nn-1;queue[top][1]=mm-3;}
        if(map[nn+1][mm-3]==0&&map[nn][mm-1]>=0) {map[nn+1][mm-3]+=map[nn][mm]+1;top++;queue[top][0]=nn+1;queue[top][1]=mm-3;}
        if(map[nn+3][mm+1]==0&&map[nn+1][mm]>=0) {map[nn+3][mm+1]+=map[nn][mm]+1;top++;queue[top][0]=nn+3;queue[top][1]=mm+1;}
        if(map[nn+3][mm-1]==0&&map[nn+1][mm]>=0) {map[nn+3][mm-1]+=map[nn][mm]+1;top++;queue[top][0]=nn+3;queue[top][1]=mm-1;}
      }     
    if(ans==0) printf("impossible\n") ;
    else printf("%d\n",ans);
  }
 return 0;
}

/*

1
4 3
4 4
3 1
1
4 3
4 4
5 1
1
5 4
4 4
7 5
1
5 4
4 4
7 3
1
4 5
4 4
3 7
1
4 5
4 4
5 7
1
3 4
4 4
1 5
1
3 4
4 4
1 3

*/

所有的方向都檢查過了 但是沒辦法通過@@?



你的牆壁沒鋪好!!只到102?? 
ZeroJudge Forum