hdu1312 red and black(BFS)
2016-07-12 16:21
417 查看
这道题其实就是计算可达的‘.'的个数,当时没想就直接用bfs了,听说dfs更好哦
#include<iostream> #include<queue> #include<cstdio> using namespace std; char map[25][25]; int vis[25][25]; int d[25][25]; int w,h; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; typedef pair<int,int>m; const int INF=110000000; queue<m>q; int bfs(int x,int y){ int wx=x,wy=y; int sum=1; vis[wx][wy]=1; d[wx][wy]=1; while(!q.empty()){ q.pop(); } q.push(m(wx,wy)); while(q.size()){ m p=q.front();q.pop(); for(int i=0;i<4;i++){ int nowx=p.first+dx[i]; int nowy=p.second+dy[i]; if(0<=nowx&&nowx<h&&0<=nowy&&nowy<w&&vis[nowx][nowy]==0&&d[nowx][nowy]==INF&&map[nowx][nowy]=='.'){ vis[nowx][nowy]=1; q.push(m(nowx,nowy)); d[nowx][nowy]=1; sum++; } } } return sum; } int main( ){ while(~scanf("%d %d",&w,&h)){ int x,y,s=0; if(w==0&&h==0){ break; } for(int i=0;i<h;i++){ getchar(); for(int j=0;j<w;j++){ scanf("%c",&map[i][j]); vis[i][j]=0; d[i][j]=INF; } } for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(map[i][j]=='@'){ x=i; y=j;//记录起点坐标 // printf("x=%d,y=%d\n",x,y); break; } } } s=bfs(x,y); cout<<s<<endl; } return 0; }
相关文章推荐
- MongoDB备份恢复
- Linux驱动子系统之I2C(2)
- 正则表达式对照表
- Tkinter教程之Event篇(3)
- java程序的耦合度是什么
- 关于组织学生参加第八届全国大学生数学竞赛江西赛区竞赛的通知
- hdu1257
- iOS中4种判断网络请求的方式(系统状态栏、AFNetworking、Reachability、自定义)
- 20160712_生活化的工作, 工作化的生活
- 深入了解viewport和px
- Linux驱动子系统之I2C(1)
- 双网卡分别接收和发送组播
- JAVA 实现二叉树(链式存储结构)
- Notification
- 依赖库Underscore系列(4)--对象
- SVN项目检出报错 :/gen already exists but is not a source folder. Convert to a source folder or rename it
- Android 设置相关
- centos6.5 python 升级2.7+pip
- session入库
- Linux驱动子系统之I2C(6)