设为首页 加入收藏

TOP

[NOIP 2014复习]第二章:搜索(二)
2015-07-20 17:45:51 来源: 作者: 【 】 浏览:17
Tags:NOIP 2014 复习 第二章 搜索
标(sx,sy) int direct[MAXM]; // int xx[]={-1,1,0,0},yy[]={0,0,-1,1}; bool inQueue[MAXN][MAXN][MAXM]; //判重用数组,inQueue[i][j][n]=true表示车子在(i,j),正在用第n个方向的状态在队列里 bool inMap(int x,int y) //判定(x,y)是否在棋盘内 { if(x<1||x>R||y<1||y>C) return false; return true; } void bfs() { inQueue[first.x][first.y][first.NumOfDir]=true; q[h]=first; //初始状态入队 while(h n) //所有的方向都用完了 { map[now.x][now.y]=2; continue; } node next=now; next.NumOfDir++; while(1) { next.x+=xx[direct[now.NumOfDir]]; next.y+=yy[direct[now.NumOfDir]]; if(map[next.x][next.y]||!inMap(next.x,next.y)) break; if(!inQueue[next.x][next.y][next.NumOfDir]) { q[t++]=next; inQueue[next.x][next.y][next.NumOfDir]=true; } } } } int main() { char s[MAXN]; scanf("%d%d",&R,&C); for(int i=1;i<=R;i++) { scanf("%s",s+1); for(int j=1;j<=C;j++) { if(s[j]=='X') map[i][j]=1; else if(s[j]=='*') { sx=i; sy=j; } } } scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",s); if(s[0]=='N') direct[i]=0; if(s[0]=='S') direct[i]=1; if(s[0]=='W') direct[i]=2; if(s[0]=='E') direct[i]=3; } first.x=sx,first.y=sy; first.NumOfDir=1; bfs(); for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) { if(map[i][j]==0) printf("."); if(map[i][j]==1) printf("X"); if(map[i][j]==2) printf("*"); } printf("\n"); } return 0; }

??
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 1733带权并查集 下一篇poj-2492- A Bug's Life

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)