| ||||||||||
| 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了4次。。。(附代码) Posted by:proverbs at 2012-05-04 23:00:12 > #include <cstdio>
> #include <cstdlib>
> #include <cstring>
> #include <iostream>
> #include <vector>
> using namespace std;
> int map[30][30],cnt[300],col[300],sx,sy,m,n;//cnt是地图中要是出现的次数,col是搜索到的要是次数,只要bfs中没有新的节点加入就说明NO
> bool vis[30][30];
> int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
> struct NOTE
> {
> int x,y;
> };
> void read()
> {
> memset(map,0,sizeof map);
> memset(cnt,0,sizeof cnt);
> memset(col,-1,sizeof col);
> memset(vis,0,sizeof vis);
> char ls[25];
> for(int i=1;i<=m;i++)
> {
> scanf("%s",ls);
> for(int j=0;j<n;j++)
> {
> map[i][j+1]=ls[j];
> if(map[i][j+1]>='a'&&map[i][j+1]<='e')
> {
> col[ls[j]]=0;
> cnt[ls[j]]++;
> }
> if(map[i][j+1]=='S') {sx=i;sy=j+1;}
> }
> }
> }
> void cal()
> {
> int flag=1;//就是这里忘了赋值了。。。
> vector<NOTE> q;
> NOTE tmp;
> tmp.x=sx;tmp.y=sy;
> q.push_back(tmp);
> vis[sx][sy]=1;
> while(flag)
> {
> flag=0;
> for(int k=0;k<q.size();k++)
> {
> NOTE sta=q[k];
> for(int i=0;i<4;i++)
> {
> int tx=sta.x+d[i][0];
> int ty=sta.y+d[i][1];
> if(tx<=0||ty<=0||tx>m||ty>n) continue;
> if(map[tx][ty]=='G')
> {
> printf("YES\n");
> return;
> }
> if(map[tx][ty]=='.'&&!vis[tx][ty])
> {
> NOTE tp;
> tp.x=tx;tp.y=ty;
> q.push_back(tp);
> flag=1;
> vis[tx][ty]=1;
> continue;
> }
> if(map[tx][ty]=='X') continue;
> if(map[tx][ty]>='a'&&map[tx][ty]<='e'&&!vis[tx][ty])
> {
> col[map[tx][ty]]++;
> vis[tx][ty]=1;
> map[tx][ty]='.';
> NOTE tp;
> tp.x=tx;tp.y=ty;
> q.push_back(tp);
> flag=1;
> continue;
> }
> if(map[tx][ty]>='A'&&map[tx][ty]<='E'&&!vis[tx][ty])
> {
> if(col[map[tx][ty]+32]<cnt[map[tx][ty]+32]) continue;
> map[tx][ty]='.';
> vis[tx][ty]=1;
> NOTE tp;
> tp.x=tx;tp.y=ty;
> q.push_back(tp);
> flag=1;
> continue;
> }
> }
> }
> }
> printf("NO\n");
> }
> int main()
> {
> while(scanf("%d%d",&m,&n)&&n&&m)
> {
> read();
> cal();
> }
> system("pause");
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator