poj 3411 Paid Roads (dfs)

http://poj.org/problem?id=3411

这题RE了N多次,到最后也不知道是什么原因。看到网上说vis[x]不会超过3,就试着加上了<=3的限制,我了个去,马上AC!

问题应该还是递归过程爆栈了吧。

code:

#include<cstdio>
#include<cstring>
const int MAX = 99999999 ;
int vis[15] ;
int ans, n, m ;
bool flag ;
struct node{
    int a ;
    int b ;
    int c ;
    int p ;
    int r ;
}q[15] ;
void dfs(int i, int v){
    if(v>ans)   return ;
    if(i==n){
        flag = true ;
        ans = v ;
        return ;
    }
    for(int j=0; j<m; j++){
        if(q[j].a!=i)  continue ;
        if(vis[q[j].b]<=3){
            vis[q[j].b] ++ ;
            if(vis[q[j].c])    dfs(q[j].b, q[j].p + v) ;
            else dfs(q[j].b, q[j].r + v) ;
            vis[q[j].b] -- ;
        }
    }
}
int main(){
    int i, j, a ;
    while(~scanf("%d%d", &n, &m)){
        memset(vis, 0sizeof(vis)) ;
        memset(q, 0sizeof(q)) ;
        flag = false ;
        ans = MAX ;
        for(i=0; i<m; i++)
            scanf("%d%d%d%d%d", &q[i].a, &q[i].b, &q[i].c, &q[i].p, &q[i].r) ;
        dfs(10) ;
        if(flag)    printf("%d\n", ans) ;
        else    printf("impossible\n") ;
    }
    return 0 ;}
原文地址:https://www.cnblogs.com/xiaolongchase/p/2373912.html