| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2122 人关注过本帖
标题:程序转化成逻辑图
只看楼主 加入收藏
lxq18
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
程序转化成逻辑图
有一个程序,想转成逻辑图,就是有箭头和方框的那种。请大侠们辛苦帮忙一下。先谢谢了!
程序如下:
#include <stdio.h>
#include <windows.h>

#define        TIME_MAX        8
#define        NUMBER_MAX        35
#define        BUS_NUMBER_MAX    5

#define        MAX_BUS_PEOPLE        35
#define        AAA                    1    //等待时间权值
#define        BBB                    1    //拥挤权值

char bus_table[NUMBER_MAX][TIME_MAX+1] = {
                "ALBLCLLS","SALBLCLL","ALSBLCLL","ALBLSCLL","CLLDLLAL","ALBLSSSS","ALSSSSBL","SSSSALBL","SSSALSBL","SALSSSBL",
                "ALSSSBLS","ALSBLSSS","SSSALBLS","SALBLSSS","SSCLLDLL","CLLSSDLL","CLLDLLSS","SCLLDLLS","SCLLSDLL","CLLSDLLS",
                "ALELLLSS","ALSSELLL","SSALELLL","SALSELLL","SALELLLS","ALSELLLS","CLLFLLLS","CLLSFLLL","SCLLFLLL","SSALBLSS",
                "SSALSSBL","ALSSBLSS","SSALSBLS","SALSSBLS","SALSBLSS"
            };
double    people[6][192] = {
        {0,3.55,6.05,8.55,11.05,13.55,16.05,2.84,4.88,6.92,8.96,11,21.2,16.28,11.36,6.44,1.52,11.18,10.02,8.88,7.72,6.58,5.43,8.87,8.53,8.2,7.87,7.53,12.33,22.27,32.2,29.8,21.84,13.88,5.92,-2.04,-10,5.2,5.2,5.2,5.2,5.2,5.2,0.62,1.69,2.77,3.84,4.91,5.97,7.05,8.11,9.19,10.26,32.8,37.8,42.8,24.4,22.8,21.2,19.6,18,24.38,21.87,19.36,16.85,14.34,11.83,9.32,6.81,4.29,1.78,-0.73,-3.24,-5.75,-8.26,-10.77,-13.28,0.93,4.01,7.09,10.18,13.26,16.34,22.8,20.6,18.4,16.2,14,11.8,25.78,20.22,14.65,9.08,3.52,-2.05,11.61,9.99,8.38,6.76,5.14,3.53,13.15,11.85,10.55,9.25,7.95,6.65,15.69,16.31,16.93,17.54,18.16,18.77,31.85,28.15,24.45,20.75,17.05,13.35,13.98,13.22,12.48,11.72,10.97,10.22,18,17.6,17.2,22.43,18.38,14.33,10.28,17.2,16.96,16.72,16.48,16.24,23.13,21.47,19.8,18.13,16.47,14.8,21.3,18.9,16.5,14.11,11.71,9.31,6.91,4.52,2.12,-0.28,-2.68,-5.08,-7.47,-9.87,-1.16,0.06,1.29,2.51,3.74,4.96,6.19,7.41,8.64,9.86,11.09,12.31,13.54,14.76,15.99,17.21,6.69,6.43,6.18,5.92,5.67,5.41,5.16,4.9,4.65,4.39,4.14,3.88,3.63,3.37,3.12,2.86},
        {0,0,0,0,0,0,73.2,15.44,12.96,10.48,7.99,5.51,3.02,16.2,15,4.3,5.1,5.9,6.7,7.5,8.3,2.8,7.07,11.33,15.6,19.87,24.13,19.07,21.73,24.4,27.07,29.73,21.6,8,6.52,6.14,5.76,5.38,5,4.62,4.24,3.86,3.48,6.86,6.34,5.83,5.31,4.79,4.27,3.76,3.24,10.18,13.02,15.88,18.72,21.58,24.42,18.2,13.6,9,12.03,11.13,10.24,9.35,8.45,0.55,1.01,1.47,1.93,2.38,2.84,3.3,3.76,4.22,4.67,5.13,5.59,6.05,6.51,6.96,7.42,7.88,8.34,17.25,20.75,24.25,27.75,28.25,25.35,22.45,19.55,16.65,13.75,3.08,5.66,8.24,10.83,13.41,15.99,6.45,7.35,8.25,9.15,10.05,10.95,-1,6.07,13.13,20.2,27.27,34.33,26.05,26.75,27.45,28.15,28.85,29.55,10.25,12.48,14.72,16.95,19.18,21.42,12.38,13.82,15.28,16.72,18.17,19.62,14.6,15.2,15.8,16.13,19.67,23.2,13.8,14.6,15.4,16.2,17,17.8,8.8,10.33,11.87,13.4,14.93,16.47,1.83,2.01,2.2,2.38,2.57,2.76,2.94,3.13,3.32,3.5,3.69,3.87,4.06,4.25,4.43,4.62,4.81,4.99,5.18,5.36,5.55,5.74,5.92,6.11,6.3,6.48,19.6,16.92,14.24,11.55,8.87,6.19,3.51,0.83,-1.85,-4.54,-7.22,-9.9},
        {0,0,0,0,0,5,1.39,1.41,1.44,1.47,1.49,6.24,5.87,5.51,5.15,4.79,4.43,4.07,3.71,3.35,2.99,2.63,2.26,2.61,3.37,4.12,4.88,5.63,6.39,7.14,7.9,8.66,9.41,10.17,10.92,3.89,3.95,4.01,4.06,4.12,4.17,4.23,4.28,4.34,4.39,4.45,4.51,-1.47,1.35,4.16,6.97,9.79,12.6,15.41,18.23,21.04,23.85,26.67,40.4,35.4,30.4,25.4,15.2,13.47,11.73,10,8.26,6.53,4.8,3.06,1.33,-0.41,-2.14,-3.88,-5.61,-7.34,3.25,3.55,3.85,4.15,4.45,4.75,5.7,5.35,5,4.66,4.31,3.96,3.62,3.27,2.92,2.57,2.23,1.88,1.53,4.7,4.53,4.35,4.18,4.01,3.84,3.66,3.49,3.32,3.15,2.98,2.8,9.54,9.7,9.86,10.01,10.17,10.32,10.48,10.63,10.79,10.94,11.1,11.26,4.53,7.07,9.6,12.13,14.67,17.2,19.73,22.27,24.8,25.33,25.87,26.4,16.14,17.66,19.17,20.69,22.21,23.72,12.12,11.13,10.13,9.14,8.14,7.15,6.15,5.16,4.16,3.17,2.17,1.18,-0.69,-0.16,0.37,0.9,1.44,1.97,2.5,3.03,3.56,4.09,4.63,5.16,5.69,6.22,6.75,7.28,7.81,8.35,8.88,9.41,9.94,10.47,11,11.53,12.07,12.6},
        {145,23.43,21.88,20.32,18.78,17.22,15.68,14.13,12.57,14.2,24,33.8,43.6,7.64,8.47,9.31,10.15,10.99,11.83,12.67,13.51,14.35,15.19,16.02,16.86,4.53,4.33,4.13,3.93,3.73,3.53,3.33,3.13,2.93,2.73,2.53,2.33,2.9,2.97,3.03,3.1,3.17,3.23,3.3,3.37,3.43,3.5,3.57,3.63,4.47,4.35,4.23,4.1,3.98,3.86,3.74,3.61,3.49,3.36,2.26,2.14,2.02,1.91,1.79,1.67,1.56,1.44,-5.69,-3.74,-1.8,0.14,2.09,4.03,5.97,7.91,9.86,11.8,13.74,15.69,17.63,19.57,17.38,23.02,28.68,34.33,15.03,13.79,12.55,11.31,10.07,8.84,7.6,6.36,5.12,3.88,2.64,1.4,2.49,3.15,3.81,4.46,5.12,5.77,6.43,7.08,7.74,8.39,9.05,9.71,14.2,13.11,12.01,10.92,9.82,8.73,7.64,6.54,5.45,4.35,3.26,2.16,9.73,9.09,8.45,7.82,7.18,6.54,5.91,5.27,4.63,4,11.51,10.29,9.07,7.86,6.64,5.42,4.21,2.99,4.65,4.26,3.86,3.47,3.08,2.68,2.29,1.89,1.5,1.1,0.71,0.31,0.61,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.58,0.58,0.58,0.58,0.58,0.58},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21.4},
        {0,0,0,0,0,62.8,0,0,33.8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38.6}
        };

//next:返回-1代表已经完成一个循环
int next(char bus_action[],const int bus_number)
{
    int i = 0;
    for(i=0; i<bus_number; ++i)
    {
        if(++bus_action[i] < NUMBER_MAX)
            return 0;
        bus_action[i] = 0;

        if(i >= 2)
            printf("已经完成%4.2f\n",(float)100*((float)bus_action[bus_number-1]*NUMBER_MAX+bus_action[bus_number-2])/(NUMBER_MAX*NUMBER_MAX));
    }
    return -1;
}
void change(int bus[TIME_MAX][6],char bus_action[],const int bus_number)
{
    memset(bus,0,TIME_MAX*6 * sizeof(int));
    int i = 0,j = 0;
    for(i=0; i<TIME_MAX; ++i)
        for(j=0; j<bus_number; ++j)
        {
            switch( bus_table[bus_action[j]][i] )
            {
            case 'A':
                ++bus[i][0];
                break;
            case 'B':
                ++bus[i][1];
                break;
            case 'C':
                ++bus[i][2];
                break;
            case 'D':
                ++bus[i][3];
                break;
            case 'E':
                ++bus[i][4];
                break;
            case 'F':
                ++bus[i][5];
                break;
            }
        }
}
//评估,返回评分,-1为漏人
long check(int bus[TIME_MAX][6],int begin_time)
{
    int  time_pre[6] = {0}, bus_time[6] = {8,8,12,12,19,19}, wait_time[6] = {10,10,20,20,30,30};
    double sum_wait_time = 0, sum_sat = 0, sum_bus_time = 0;
    int time_now = 0, zone = 0, i = 0;

    for(i=0; i<6; ++i)
        time_pre[i] = begin_time;
    for(time_now = begin_time; time_now < begin_time+TIME_MAX; ++time_now)
    {
        for(zone=0; zone<6; ++zone)
        {
            for(i = time_pre[zone]; i <= time_now; ++i)
            {
                sum_wait_time += people[zone][i] * ((time_now - i)*5 + 2.5);
                sum_bus_time += bus[time_now - begin_time][zone] * bus_time[zone];
            }
            time_pre[zone] = i;
        }
    }
    for(i=0; i<6; ++i)
        time_pre[i] = begin_time;
    for(time_now = begin_time; time_now < begin_time+TIME_MAX; ++time_now)
    {
        for(zone=0; zone<6; ++zone)
        {
            double people_all = 0;
            for(i = time_pre[zone]; i <= time_now; ++i)
            {
                people_all += people[zone][i];
            }
            if(people_all >  MAX_BUS_PEOPLE * bus[time_now][zone])
                sum_sat += (people_all - MAX_BUS_PEOPLE * bus[time_now - begin_time][zone]) * bus_time[zone];
            time_pre[zone] = i;
        }
    }
    return (long)(sum_wait_time*AAA + sum_sat*BBB);
}

void main()
{
    char bus_action[BUS_NUMBER_MAX] = {0},bus_action_min[BUS_NUMBER_MAX];
    int    bus_number = 5;
   
    int bus[TIME_MAX][6] = {0};
    long score = 0, score_min = 2147483647;

    do
    {
//        printf("%d  %d  %d  %d  %d        ",bus_action[0],bus_action[1],bus_action[2],bus_action[3],bus_action[4]);
        change(bus,bus_action,bus_number);
   
        score = check(bus,53);
        if(score < score_min)
        {
            score_min = score;
            memcpy(bus_action_min,bus_action,BUS_NUMBER_MAX * sizeof(char));
        }
//        printf("%d\n",score);
    }while(next(bus_action,bus_number) == 0);
    printf("\n\n%d  %d  %d  %d  %d        ",bus_action_min[0],bus_action_min[1],bus_action_min[2],bus_action_min[3],bus_action_min[4]);
    printf("%d\n",score_min);
    system("pause");

}
搜索更多相关主题的帖子: 逻辑 
2010-08-24 23:41
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:6 
汗,这个程序中的数据真是糟糕呢!!看着都繁!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-24 23:51
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:6 
这玩艺可没法看。是你自己写的吗?
2010-08-25 00:31
lxq18
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-24
收藏
得分:0 
不是我自己写的,写的人出国了。所以求助各位。
2010-08-25 07:44
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:6 
以下是引用lxq18在2010-8-25 07:44:41的发言:

不是我自己写的,写的人出国了。所以求助各位。

请问这个是作业题目 还是?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-08-25 18:00
快速回复:程序转化成逻辑图
数据加载中...
 
   



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

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