UVA 657 The die is cast (DFS*2)
2015-12-21 06:52
417 查看
分析:双DFS,一个搜索*,一个搜索X;(遍历完每个地方后把他变为背景‘.’)
题意就是判断X(连通算一个,四方向遍历)的个数,也就是筛子的点数。
题意很简单,但程序写起来还是有难度的,WA数次。(本题类似于古代象形符号)
题意就是判断X(连通算一个,四方向遍历)的个数,也就是筛子的点数。
题意很简单,但程序写起来还是有难度的,WA数次。(本题类似于古代象形符号)
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <cstdlib> using namespace std; const int maxn=55; char pic[maxn][maxn]; int cnt; int i_cmp(void const *x,void const *y) { return *(int*)x-*(int*)y; } void dfs(int r,int c) { if (pic[r][c]!='X')return ; else pic[r][c]='.'; dfs(r-1,c);dfs(r,c-1); dfs(r,c+1);dfs(r+1,c); } void dfs2(int r,int c) { if (pic[r][c]=='.') return ; if (pic[r][c]=='X') { dfs(r,c); cnt++; } pic[r][c]='.'; dfs2(r-1,c);dfs2(r,c-1); dfs2(r,c+1);dfs2(r+1,c); } int main() { int kase=0,dote[100]; int n,m,ct; while (scanf("%d%d",&n,&m)==2&&m&&n) { memset(pic,'.',sizeof(pic)); for(int i=1; i<=m; i++) { getchar(); for(int j=1; j<=n; j++) scanf("%c",&pic[i][j]); } ct=0; for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) { if (pic[i][j]=='*') { cnt=0; dfs2(i,j); dote[ct++]=cnt; } } printf("Throw %d\n", ++kase); qsort(dote,ct,sizeof(dote[0]),i_cmp); for(int i=0; i<ct; i++) { if(i) printf(" "); printf("%d",dote[i]); } printf("\n\n"); } return 0; }
相关文章推荐
- ASP.NET MVC - The view must derive from WebViewPage, or WebViewPage<TModel>
- UVA 755 487--3279
- Leetcode: Shortest Word Distance III
- UVA 299 Train Swapping
- UVA-152 Tree's a Crowd
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导(虚函数的开销很小,就2次操作而已)
- 开始一个新的地方作为自己技术的心灵园田,新浪微博太伤我心了
- UVA-10420 List of Conquests
- UVA-340 Master-Mind Hints (猜数字)
- Data URI 应用场景小结
- [leetcode] 22. Generate Parentheses 解题报告
- urllib.urlretrieve()
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- *Reverse Linked List II
- LeetCode - Remove Duplicates from Sorted Array
- C标准库没提供的助手函数:字符串替换
- LeetCode - Reverse Nodes in k-Group
- Leetcode: Shortest Word Distance II
- Android RecyclerView使用详解四
- *Insertion Sort List