此题有递推的做法,不过我的做法是将记录的信息直接恢复到递归工作栈中。
以下是我的代码:
#include<stdio.h>
#include<string.h>
#define maxn 10007
long n,m,count,a[maxn],ans[maxn];
bool first,find,used[maxn];
void dfs(long dep)
{
if(dep>n)
{
first=false;
count++;
if(count>m) find=true;
}
for(long i=1;i<=n&&!find;i++)
{
if(first) i=a[dep];
if(!used[i])
{
used[i]=true;
ans[dep]=i;
dfs(dep+1);
used[i]=false;
}
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("martian.in","r");
fout=fopen("martian.out","w");
fscanf(fin,"%ld%ld",&n,&m);
for(long i=1;i<=n;i++) fscanf(fin,"%ld",&a[i]);
first=true;find=false;count=0;
memset(used,false,sizeof(used));
dfs(1);
for(long i=1;i<=n;i++)
fprintf(fout,"%ld ",ans[i]);
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
}
posted on 2010-03-22 21:39
lee1r 阅读(796)
评论(1) 编辑 收藏 引用 所属分类:
题目分类:数据结构