2015-11-01
今天写拓扑排序的时候,bool类型返回值的函数最后面没有return 结果一直WA,后来才发现愚蠢了。如果编译器没有-Wall选项,就很难发现,所以以后自己要注意。
前两天做一道栈表达式的时候遇到字符串的问题,要将string转换成单个char供switch作参数用,但是我想不出什么好方法,不过觉得c_str这个函数也还可以吧。
switch(expr[cur].c_str()[0]){ case '+': result.push(r1+r2); break; case '-': result.push(r1-r2); break; case '*': result.push(r1*r2); break; case '/': result.push(r1/r2); break; }
char * c_str() 由于返回字符指针,所以取其第一个字符,用[0]表示。
前段时间还做了二分查找,其实不简单的,边界条件不一定都是(l<r) (l<=r) 而我做的三道题都应该是(l+1<r)一种相邻状态退出,然后再在while之后判断的。
还有二分图最大匹配,用匈牙利算法的,注意dfs中取增广路的if判断,以及两个数组的意义,一个是右端点与哪个点匹配,还有一个是左端点在本次搜索中是否被用过。
1 bool dfs(int x){ 2 for(int i=0;i<g[x].size();i++){ 3 int v=g[x][i]; 4 if(vis[v])continue; vis[v]=true; 5 if(matching[v]==-1||dfs(matching[v])){ 6 matching[v]=x; 7 return true; 8 } 9 } 10 return false; 11 } 12 void solve(){ 13 int ans=0; 14 memset(matching,-1,sizeof(matching)); 15 for(int i=1;i<=n;i++){ 16 memset(vis,0,sizeof(vis)); 17 if(dfs(i))ans++; 18 } 19 cout<<ans<<endl; 20 }
好久没写博客了,有些做过的遇到的问题都有点记不起来了,所以以后要及时更新博客把这些问题记录下来,先这样吧。
当有那么一天,你相信你可以做到的时候,那你就真的能够做到!
路在脚下