天啊,漏了一个条件,搞了半天,默认从第0个problem 开始做起,唉,我枚举所有的问题了……………………
在DFS过程中,只要把最大深度记录下来即可,不需要其他
#include<iostream> #include<string> using namespace std; int n,map[15][15],ans; bool vis[15]; void dfs(int i,int j,int deep) { if(deep>ans)ans=deep; for(int k=1;k<=n;k++) { if(vis[k]||k==j) continue; if(map[i][j]<=map[j][k]) { vis[k]=1; dfs(j,k,deep+1); vis[k]=0; } } return ; } int main() { while(cin>>n) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>map[i][j]; memset(vis,0,sizeof(vis)); ans=0; for(int j=2;j<=n;j++) { vis[j]=1;vis[1]=1; dfs(1,j,2); vis[j]=0;vis[1]=0; } cout<<ans<<endl; } return 0; }