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 }

好久没写博客了,有些做过的遇到的问题都有点记不起来了,所以以后要及时更新博客把这些问题记录下来,先这样吧。

posted @ 2015-11-01 15:33  JimmyLin^_^  阅读(130)  评论(0编辑  收藏  举报