hdu 2614

天啊,漏了一个条件,搞了半天,默认从第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;
}
posted @ 2011-08-11 23:58  枕边梦  阅读(250)  评论(0编辑  收藏  举报