算法各种不给力,但是慢慢的研究下来发现其实挺有意思的。自己当时觉得老师讲得太水了,就毅然决然的没有选择算法课,但是大学四年我也咩有好好学习过算法。
突然想到大学就这么被我荒废掉的这么多旧时光,真是让人感伤。
想想上次去清华面试的时候,师兄问我们考试的情况,大家都说题目最后一题比较难,然后他听大家讲完题目之后,秒杀了最后一题,然后我就默默的跪倒了。
果真和清华的小朋友们有质的差距。。。第二天早上一电信的哥们十分自信的在描述最后一题是如何简单的时候,然后我就默默的慌张了,因为我压根就
不会,除了第一题飞快的搞定了之后。然后就自信满满的没有检查,导致一个月后回想起来都还纳闷第一题是循环输入还是单词输入的问题上心惊肉跳了一个月。
以前总是喜欢规避问题,然后当不得不面临问题的时候其实我什么也做不好。我学计算机网络的时候也是这个样子的,之前一个老师讲得非常好,然后换了个老师
立马开始水了。今天和小学弟在讨论网络的问题的时候,他问我没学过计算机网络么,然后我默默的忧伤了,曾几何时我是下了决心要以后死磕网络,然后读网络的
DR,现在看来好像本科不过关呢。
呀呀,明天又要继续奋斗了。
虽然今天搞了一天大家都认为很水的一道搜索算法题,但是我认认真真的想了才想出来的,虽然在VS通过了测试用例,但是悲剧的是过OJ的时候报了一个WA,郁闷。
仔细对比了一下网上的代码,是一样一样的,不管了。先回顾一下煎熬史。
哦,对了,之前学的C++大概是在某几次便便之后都拿去浇花了,所以导致我现在记不起一点C++,所以我明天开始要开始复习C++。
不对,明天要写开题报告。
今天死磕了一天,先总结一下问题,方便以后查缺补漏,提高自我,哈哈~
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 20850 | Accepted: 11150 |
Description
Input
Output
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#.
//可走的下一个点 if(x >= 0 && x <= H && y >=0 && y < W && cango[x][y] == '.' )
DFS(p - 1, q); DFS(p, q - 1); DFS(p, q + 1); DFS(p + 1, q);
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_N 20 int W, H; char a[MAX_N][MAX_N]; int res=1; bool flag = false; int dfs(int nx, int ny) { //搜索下面 if(nx>=0 && nx+1<H && ny>=0 && ny<W && a[nx+1][ny] =='.') { nx = nx+1; a[nx][ny] = '#'; res++; flag = true; dfs(nx,ny); } //搜索右面 if(nx>=0 && nx<H && ny>=0 && ny+1<W && a[nx][ny+1]=='.') { ny = ny +1; a[nx][ny] = '#'; res++; flag = true; dfs(nx,ny); } //搜索上面 if(nx-1>=0 && nx<H && ny>=0 && ny<W && a[nx-1][ny] =='.') { nx = nx-1; a[nx][ny] = '#'; res++; flag = true; dfs(nx,ny); } //搜索左面 if(nx>=0 && nx<H && ny-1>=0 && ny<W && a[nx][ny-1]=='.') { ny = ny-1; a[nx][ny] = '#'; res++; flag = true; dfs(nx,ny); } if(flag == false) return res; return res; } int main() { int nx=0,ny=0; char c; int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1}; int x,y; while(scanf("%d%d\n",&W, &H) && (W || H)) { for(int i=0; i<H; i++) { for(int j=0; j<W; j++) { scanf("%c",&a[i][j]); if(a[i][j]=='@') { nx = i; ny = j; a[nx][ny] = '#'; } } c=getchar(); } for(int i = 0; i < 4; i++) { x = nx + dx[i]; y = ny + dy[i]; if(a[x][y]=='.') { res=dfs(nx,ny); } } printf("%d\n",res); res=1; } //system("PAUSE"); return 0; }
//#define LOCAL #include <stdio.h> #include <string.h> #define MAXN 20 + 10 char graph[MAXN][MAXN]; int m, n; int result; void DFS(int p, int q); int main() { #ifdef LOCAL freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempIn.txt", "r", stdin); //freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempOut.txt", "w", stdout); #endif int i, j; int p, q; while(scanf("%d%d", &n, &m) && m != 0) { // 数据的初始化 result = 0; memset(graph, 0, sizeof(graph)); // 数据输入 for(i = 0; i < m; i++) for(j = 0; j < n; j++) { scanf("\n%c", &graph[i][j]); if(graph[i][j] == '@') { p = i; q = j; graph[i][j] = '.'; } } // 算法主体 DFS(p , q); // 数据输出 printf("%d\n", result); } return 0; } void DFS(int p, int q) { if(p <= m - 1 && p >= 0 && q >= 0 && q <= n - 1 && graph[p][q] == '.') { result++; graph[p][q] = '#'; }else { return; } DFS(p - 1, q); DFS(p, q - 1); DFS(p, q + 1); DFS(p + 1, q); }
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_N 20 int W, H; char a[MAX_N][MAX_N]; int res=0; int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1}; int x,y; void dfs(int nx, int ny) { if(nx >= 0 && nx < H && ny >= 0 && ny < W && a[nx][ny] =='.') { a[nx][ny] = '#'; res++; } else return; for(int i = 0; i < 4; i++) { x = nx + dx[i]; y = ny + dy[i]; if(a[x][y]=='.') { dfs(x,y); } } } int main() { int nx=0,ny=0; while(scanf("%d%d\n",&W, &H) && (W || H)) { for(int i=0; i<H; i++) { for(int j=0; j<W; j++) { scanf("%c",&a[i][j]); if(a[i][j]=='@') { nx = i; ny = j; } } getchar(); } a[nx][ny] = '.'; dfs(nx,ny); printf("%d\n",res); res=0; } //system("PAUSE"); return 0; }