标签:memset uri cout ios 导致 mem ott 12px logs
题目代号:HDU 1312
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 20820 Accepted Submission(s): 12673
题目大意:一个男子站在‘.’上,他不能走到‘#’上问他能走到的‘.’的数量是多少。
解题思路:初始点bfs四个方向都遍历一次即可。
差点被自己气哭,第一次提交的时候忘记初始化数组,因为没有判断边界,直接导致WA。
AC代码:
# include <stdio.h> # include <string.h> # include <stdlib.h> # include <iostream> # include <fstream> # include <vector> # include <queue> # include <stack> # include <map> # include <math.h> # include <algorithm> using namespace std; # define pi acos(-1.0) # define mem(a,b) memset(a,b,sizeof(a)) # define FOR(i,a,n) for(int i=a; i<=n; ++i) # define For(i,n,a) for(int i=n; i>=a; --i) # define FO(i,a,n) for(int i=a; i<n; ++i) # define Fo(i,n,a) for(int i=n; i>a ;--i) typedef long long LL; typedef unsigned long long ULL; const int MAXM=25; char a[MAXM][MAXM]; int n,m,ans; int cx[]={-1,1,0,0}; int cy[]={0,0,-1,1}; struct node { int x,y; }; queue<node>Q; void bfs() { while(!Q.empty()) { int x=Q.front().x; int y=Q.front().y; Q.pop(); for(int i=0;i<4;i++) { int tx=x+cx[i]; int ty=y+cy[i]; if(a[tx][ty]==‘.‘) { ans++; a[tx][ty]=‘#‘; Q.push(node{tx,ty}); } } } } int main() { //freopen("in.txt", "r", stdin); while(cin>>m>>n,n&&m) { mem(a,0); for(int i=1;i<=n;i++) { cin>>a[i]+1; for(int j=1;j<=m;j++) { if(a[i][j]==‘@‘) { Q.push(node{i,j}); a[i][j]=‘#‘; } } } ans=1; bfs(); cout<<ans<<endl; } return 0; }
HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
标签:memset uri cout ios 导致 mem ott 12px logs
原文地址:http://www.cnblogs.com/teble/p/7243684.html