POJ 2897

dfs搜索,实际上每次只有一个前进的方向,记录进位与当前位,用一个bool标记即可。

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 using namespace std;

 4 int n,k;

 5 bool ok,g[10][10];

 6 void dfs(int res,int add)

 7 {

 8     if(res*n+add==k)

 9     {

10         ok=true;

11         return;

12     }

13     else if(g[res][add])

14     {

15         return;

16     }

17     g[res][add]=true;

18     int x=res*n+add,y=x%10;

19     x/=10;

20     dfs(y,x);

21     if(ok)

22         printf("%d",y);

23 }

24 int main()

25 {

26     int T;

27     for(scanf("%d",&T);T;T--)

28     {

29         scanf("%d%d",&n,&k);

30         if(n>k)

31             printf("0\n");

32         else if(n==1)

33             printf("%d\n",k);

34         else

35         {

36             ok=false;

37             memset(g,false,sizeof(g));

38             dfs(k,0);

39             if(!ok)

40                 printf("0\n");

41             else

42                 printf("%d\n",k);

43         }

44     }

45     return 0;

46 }

你可能感兴趣的:(poj)