ACM乐园
Love Me,Love My Code!
posts - 53,  comments - 24,  trackbacks - 0


//输入样例:
//3 2
//输出样例:
//0 0 0
//0 0 1
//0 1 0
//0 1 1
//1 0 0
//1 0 1
//1 1 0
//1 1 1
#include <iostream>

using namespace std;

const int MAX=1000000;

int data[MAX],n,m;

void dfs(int step)
{
    
int i;
    
if(step==n)
    
{
        
for(i=0;i<n;i++)
            printf(
"%d%c",data[i],i==n-1?'\n':' ');
        
return ;
    }

    
for(i=0;i<m;i++)
    
{
        data[step]
=i;
        dfs(step
+1);
    }

}


int main()
{
    
while(scanf("%d%d",&n,&m)!=EOF)
        dfs(
0);
    
return 0;
}


//输入样例:
//3
//输出样例:
//1 2 3
//1 3 2
//2 1 3
//2 3 1
//3 1 2
//3 2 1
#include <iostream>

using namespace std;

const int MAX=1000000;

int data[MAX],n;
bool visit[MAX];

void dfs(int step)
{
    
int i;
    
if(step==n)
    
{
        
for(i=0;i<n;i++)
            printf(
"%d%c",data[i],i==n-1?'\n':' ');
        
return ;
    }

    
for(i=1;i<=n;i++)
    
{
        
if(!visit[i])
        
{
            visit[i]
=true;
            data[step]
=i;
            dfs(step
+1);
            visit[i]
=false;
        }

    }

}


int main()
{
    
while(scanf("%d",&n)!=EOF)
    
{
        memset(visit,
0,sizeof(visit));
        dfs(
0);
    }

    
return 0;
}


//输入样例:
//3
//1 1 2
//输出样例:
//1 1 2
//1 2 1
//2 1 1
#include <iostream>

using namespace std;

const int MAX=1000000;

int data[MAX],n,visit[MAX],k,d[MAX];

void dfs(int step)
{
    
int i;
    
if(step==n)
    
{
        
for(i=0;i<n;i++)
            printf(
"%d%c",d[i],i==n-1?'\n':' ');
        
return ;
    }

    
for(i=0;i<k;i++)
    
{
        
if(visit[i]>0)
        
{
            visit[i]
--;
            d[step]
=data[i];
            dfs(step
+1);
            visit[i]
++;
        }

    }

}


int main()
{
    
int i,a,j;
    
while(scanf("%d",&n)!=EOF)
    
{
        memset(visit,
0,sizeof(visit));
        k
=0;
        
for(i=0;i<n;i++)
        
{
            scanf(
"%d",&a);
            
for(j=0;j<k;j++)
                
if(data[j]==a)
                
{
                    visit[j]
++;
                    
break;
                }

            
if(j==k)
            
{
                data[k]
=a;
                visit[k
++]=1;
            }

        }

        dfs(
0);
    }

    
return 0;
}

今天进行了简单的dfs练习,明天继续。
posted on 2011-04-23 22:30 大大木马 阅读(229) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案(53)

文章档案(2)

搜索

  •  

积分与排名

  • 积分 - 63780
  • 排名 - 351

最新评论

阅读排行榜

评论排行榜