| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 419 人关注过本帖
标题:用回溯法搞了好久没搞出来,求别的方法
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:20 回复次数:6 
用回溯法搞了好久没搞出来,求别的方法
彩灯问题,N个等串在一起,每一个灯的颜色都不相同,问这个灯有多少颜色的组合,并且将他们输出来,如N=2,颜色有blue ,black两种,输出为2 blue black,black ,blue。
我是想学N皇后问题来做的,错误挺多,不知道怎么改,能帮忙看看吗?语法错的多,我用数字表示颜色的不是字符串。。。。。
#include "stdio.h"
int N;

void lights(int N)
{    int i;
    int a[10],b[10];//a[n],b[n]的值为灯的颜色

    for(i=0;i<N;i++)//输入颜色
        scanf("%d",&b[i]);
    for(i=0;i<N;i++)
        a[i]=b[0];//先赋初值,全赋b[0]颜色
   
}
int conflict(int a,int b)
{
    int i,j,t,N;
    for(i=t;i<N;i++)//是否冲突,冲突返回0.不冲突返回1,比较a[i]与它之前的所有的灯的颜色,如果相同则冲突
        for(j=i;j>=0;j--)
    {   
                if(i<N)
            {
                if(a[i]==a[j])
                {
                a[i]=b[i+1];
                return 0;
                }
            }

    }
        return 1;
}
void input(int a)
{   
    int i;
    for(i=0;i<N;i++)
    {
        a[i];
    }

}
int answer(int b,int a)
{
    int j=1,t;
            for(t=1;;t++,j++)//冲突a[i]移至下一颜色,不冲突则比较a[i+1],待i加到n-1时,输出,找到一个解以后将a[0移位],以此类推
            {
                if(t<N)
                {
                    if(conflict(a[t]))
                        continue;   
                    else if(!conflict(a[t]))//如果冲突,a[t]被赋于下一颜色
                    {a[t]=b[j];j++;}
                }
                //恰好边界则找到可行解,输出
                if(t==(N-1))
                {
                    input();

                }
            }        
}
int main(int a,int b)
{

    int k;
    scanf("%d",&N);
    lights(int N);

    while(N)//
    {
        for(k=0;k<N;k++)   
        {
        a[0]=b[k];

        answer();
        }
    }
return 0;
}
搜索更多相关主题的帖子: include 字符串 black 想学 
2014-04-10 16:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
有一个问题,灯数 和 颜色 数,是否相同,就是说会不会有相同颜色的 灯


[fly]存在即是合理[/fly]
2014-04-10 16:45
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
应该是算法问题。。。 回去想想。。数学数论不过关只能试着想想穷举法了

未知令人期待!
2014-04-10 20:01
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:0 
我感觉好像是求n的阶乘,不知道是不是
2014-04-10 20:08
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 azzbcc
原题
小J在公园里看到一串彩灯,每个彩灯都能释放出不同的颜色,并且每两个彩灯的颜色都不相同,即所有彩灯颜色不重复。随着时间的变化,每个彩灯都会变化自己的颜色,并且都满足每两个彩灯的颜色都不相同。
    小J对这些变化的彩灯十分有兴趣,他想弄清楚这些彩灯总共能变化出多少种不同的组合,这些组合分别又是哪些。小J想请一位计算机高手解决这个问题,你能帮助小J吗?
现在知道了是个全排列问题,不过也不知道回溯能不能做出来?
2014-04-10 22:20
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
程序代码:
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#define MAX  5

int count = 0;

void print(int a[], int n)
{
    int i;

    printf("[%03d]", count += 1);

    for (i = 0;i < n;i += 1)
    {
        printf("%2d", a[i]);
    }
    printf("\n");
}

void fun(int a[], int ip)
{
    int i, temp;

    if (ip == MAX)
    {
        print(a, MAX);
    }

    for (i = ip;i < MAX;i += 1)
    {
        temp = a[i], a[i] = a[ip], a[ip] = temp;
        fun(a, ip + 1);
        temp = a[i], a[i] = a[ip], a[ip] = temp;
    }
}

int judge(int a[], int n)
{
    int i;
    for (i = 0;i < n;i += 1)
    {
        if (a[i] == a[n])
        {
            return 1;
        }
    }
    return 0;
}

void foo(int a[], int tmp[], int ip)
{
    int i;

    if (ip == MAX)
    {
        print(tmp, MAX);
        return;
    }

    for (i = 0;i < MAX;i += 1)
    {
        tmp[ip] = a[i];
        if (judge(tmp, ip))
        {
            continue;
        }
        foo(a, tmp, ip + 1);
    }
}

int main()
{
    int tmp[MAX], a[MAX] = {1, 2, 3, 4, 5};

//    count = 0, fun(a, 0);
    count = 0, foo(a, tmp, 0);

    return 0;
}


[fly]存在即是合理[/fly]
2014-04-10 23:41
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
分治 回溯

分治应该快一点


[fly]存在即是合理[/fly]
2014-04-10 23:44
快速回复:用回溯法搞了好久没搞出来,求别的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035538 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved