| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
有些钥匙可能需要先开一些门才能取到,你的代码可能在这里出了问题In Reply To:WA了,谁帮忙看看,是不是题目还有什么要注意的啊 Posted by:hudedi at 2006-03-12 16:13:19 > /*2157*/
> #include<stdio.h>
> #define N 25
>
> /*第一次找钥匙,用的是find标记,第二次找G,用的是 find2 标记*/
> /*一旦找到G,就将1赋给P*/
>
> char maze[N][N];
> int find[N][N],key[8],p,find2[N][N];
> int m,n;
>
> void init()
> {
> int ii,jj;
> p=0;
> for(ii=0;ii<7;ii++)
> key[ii]=0;
>
> for(ii=0;ii<m;ii++)
> for(jj=0;jj<n;jj++)
> find[ii][jj]=find2[ii][jj]=0;
>
> for(ii=0;ii<m;ii++)
> scanf("%s",maze[ii]);
> }
>
> int judge(int ii,int jj)
> {
> if(ii<m&&ii>=0&&jj<n&&jj>=0)
> return 1;
> else return 0;
> }
>
> int need(int ii,int jj)
> {
> if((judge(ii,jj))&&!find[ii][jj]&&maze[ii][jj]!='X'
> &&maze[ii][jj]!='A'&&maze[ii][jj]!='B'&&maze[ii][jj]!='C'
> &&maze[ii][jj]!='D'&&maze[ii][jj]!='E'&&maze[ii][jj]!='G')
> return 1;
> else return 0;
> }
>
> void bfs(int ii,int jj)
> {
> switch(maze[ii][jj])
> {
> case 'a':key[1]++;break;
> case 'b':key[2]++;break;
> case 'c':key[3]++;break;
> case 'd':key[4]++;break;
> case 'e':key[5]++;break;
> }
> /*printf("%d %d\n",ii,jj); */
> find[ii][jj]=1;
> if(need(ii-1,jj))
> bfs(ii-1,jj);
> if(need(ii,jj-1))
> bfs(ii,jj-1);
> if(need(ii+1,jj))
> bfs(ii+1,jj);
> if(need(ii,jj+1))
> bfs(ii,jj+1);
> }
>
> int out(char c)
> {
> int q=1;
> switch(c)
> {
> case 'A':if(key[1]<3)
> q=0;
> break;
> case 'B':if(key[2]<3)
> { q=0;}break;
> case 'C':if(key[3]<3)
> { q=0;}break;
> case 'D':if(key[4]<3)
> { q=0;}break;
> case 'E':if(key[5]<3)
> { q=0;}break;
> case 'X':q=0;break;
>
> }
> if(q)
> return 1;
> else return 0;
> }
>
> int open(int ii,int jj)
> {
> if(p)
> return 1;
> if(maze[ii][jj]=='G')
> p=1;
> find2[ii][jj]=1;
> if(judge(ii-1,jj)&&out(maze[ii-1][jj])&&!find2[ii-1][jj])
> open(ii-1,jj);
> if(judge(ii+1,jj)&&out(maze[ii+1][jj])&&!find2[ii+1][jj])
> open(ii+1,jj);
> if(judge(ii,jj+1)&&out(maze[ii][jj+1])&&!find2[ii][jj+1])
> open(ii,jj+1);
> if(judge(ii,jj-1)&&out(maze[ii][jj-1])
> &&!find2[ii][jj-1])
> open(ii,jj-1);
> }
>
> int main()
> {
> int ii,jj;
> while(scanf("%d%d",&m,&n)&&m)
> {
> init();
>
> for(ii=0;ii<m;ii++)
> for(jj=0;jj<n;jj++)
> if(maze[ii][jj]=='S')
> {
> bfs(ii,jj);
> /**/ open(ii,jj);
> goto inx;
> }
>
> inx:
> /* for(ii=0;ii<6;ii++)
> printf("%d \n",key[ii]);*/
> if(p)
> printf("YES\n");
> else
> printf("NO\n");
>
> }
> return 1;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator