这题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, 0, sizeof(vis)) ; memset(q, 0, sizeof(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( 1, 0) ; if(flag) printf( " %d\n ", ans) ; else printf( " impossible\n ") ; } return 0 ;}