HDU 4414 Finding crosses
2014-09-10 09:45
302 查看
题意:给出一个图,让你找到所有的十字。
思路:简单的模拟题。枚举中心,查找十字就行了。
代码如下:
思路:简单的模拟题。枚举中心,查找十字就行了。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<cmath> #include<iostream> #include<vector> using namespace std; char m[55][55]; int n; int ans=0; int l=0; bool solve(int x,int y,int num) { bool fa=true; l=0; if(num==0) { while(x>0&&m[x][y]=='#') { x--; if(m[x][y]=='#') { if(m[x][y-1]=='#' || m[x][y+1]=='#') { return false; } else l++; } } } if(num==1) { while(y<n&&m[x][y]=='#') { y++; if(m[x][y]=='#') { if(m[x-1][y]=='#' || m[x+1][y]=='#') { return false; } else l++; } } } if(num==2) { while(x<n&&m[x][y]=='#') { x++; if(m[x][y]=='#') { if(m[x][y-1]=='#' || m[x][y+1]=='#') { return false; } else l++; } } } if(num==3) { while(y>0 &&m[x][y]=='#') { y--; if(m[x][y]=='#') { if(m[x-1][y]=='#' || m[x+1][y]=='#') { return false; } else l++; } } } return true; } int main() { //freopen("in","r",stdin); while(scanf("%d",&n)&&n) { int i,j,k; bool f=true; ans=0; getchar(); for(i=0;i<n;i++) scanf("%s",m[i]); int mark; for(i=1;i<n-1;i++) for(j=1;j<n-1;j++) { if(m[i][j]=='#') { f=true; mark=0; for(k=0;k<4 &&f;k++) { f=solve(i,j,k); //if(!f) printf(" %d %d %d\n",i,j,k); if(k==0) mark=l; else if(mark!=l) f=false; } } if(f && mark!=0 && m[i][j]=='#') ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 4414: Finding crosses
- hdu 4414 Finding crosses
- HDU 4414 Finding crosses(dfs)
- HDU 4414 Finding crosses
- hdu 4414 Finding crosses
- HDU 4414 Finding crosses (DFS + BFS)
- HDU 4414 Finding crosses (暴力模拟)
- HDU 4414 Finding crosses(暴力判断)
- HDU-4414 Finding crosses 水题
- HDU 4414 Finding crosses (DFS + BFS)
- hdu 4414 Finding crosses【简单模拟】
- HDU 4414 Finding crosses
- HDU 4414 Finding crosses 暴力枚举
- hdu 4414 Finding crosses【简单模拟】
- HDU 4414 Finding crosses(搜索)
- hdu-4414-Finding crosses
- HDU 4414 Finding crosses (DFS + BFS)
- HDU 4414 Finding crosses(爆搜)
- HDU 4414 Finding crosses(dfs)
- HDU 4414 Finding crosses(搜索)