zoukankan      html  css  js  c++  java
  • 【现代程序设计】【homework-04】

    Personal Software Process Stages

    时间百分比(%)

    实际花费的时间 (分钟)

    原来估计的时间 (分钟)

    计划

     0

     0

     0

    ·           估计这个任务需要多少时间,把工作细化并大致排序

     0

     0

     0

    开发

     

     

     

    ·           需求分析 (包括学习新技术)

     0

     0

    ·           生成设计文档

     0

     0

     0

    ·           设计复审 (和同事审核设计文档)

     0

     0

     0

    ·           代码规范 (制定合适的规范)

     0

     0

     0

    ·           具体设计

     5

    30min

     30min

    ·           具体编码

     60

     3h

     4h

    ·           代码复审

     5

     10min

     0

    ·           测试(自我测试,修改代码,提交修改)

     30

     1h

     1h

    总结报告

     

     

     

    •   测试报告

     

     

     

    •   计算工作量

     

     

     

    •   事后总结, 并提出改进

     

     

     

    总计

    100%

    总用时 5H

    总估计的用时 6H

     总结:

    感觉这次作业在算法方面难度过大,有点难以入手

    对于第一个要求:每个单词仅出现一次。这个限制条件过于抽象,无法从这个角度去实现具体编码

    我选择的是从【图形必须是正方形】出发

    先将n的值设置位Max(WordLength)

    然后在这个n*n的矩阵中以某种【特定的顺序】尝试填入所有单词

    如果成功,则输出这个矩阵,else n++;

    下面解释何为【特定的顺序】

    首先从最具体的条件出发,即【每个角都必须有一个单词】

    然后从【不能含有空行】这个条件出发,优先把四条边填满

    然后将剩余的单词,填入这个矩阵中

    具体做法是暴力枚举:即枚举矩阵中的每一个点,如果这个点可以放入某个单词,那么就将这个单词放入

    最后将所有的空白,随机填入一个字母

    此时检查【单词唯一性】问题,如果不满足,则改变单词的填入顺序

    在进行测试

    不得不说  这个算法思路实在是非常的烂

    虽然能满足所有的限制条件

    但是得到的矩阵可能非常大。。。。

    因为对于【单词的交错相连】这个点

    我暂时没有找到更好的方法去处理这个问题

    所以得到的图可能是一个比较松散的图

    这是一个测试数据的截图:

    下面是用c写的源码:

    (将测试数据复制入testdata文本中,将生成同目录下的一个wordoutput文本,用于显示结果)

    #include <stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #define M 300
    
    #define sinput "testdata.txt"
    #define soutput "WordOutPut.txt"
    FILE *file,*fileout;
    
    int used[M],i,j,k,x,maxl,l,y,n,u,t,an,ini[M],len[M],e,start,charused[M],ismin;
    
    char a[M][M],s[M],g[M][M],sum,c[M],dx[]={0,1,-1,0,-1,1,-1,1},dy[]={1,0,0,-1,-1,1,1,-1};
    
    
    
    
    int ising(int x,int y)
    {
        return (x>=0&&x<n&&y>=0&&y<n);
    }
    
    f(int dx,int dy,int x,int y,char* s)
    {
        int i;
        for(i=0;s[i];i++){
            g[x][y]=s[i];
            x+=dx;
            y+=dy;
        }
    }
    
    
    int pd(int dx,int dy,int x,int y,char *s)
    {
        int i;
        for(i=0;s[i];i++){
            if(!(g[x][y]==s[i]||!g[x][y])||!ising(x,y)) return 0;
            x+=dx;
            y+=dy;
        }
        return 1;
        
    }
    
    
    main()
    {
        file=fopen(sinput,"r");
        fileout=fopen(soutput,"w");
        
        while(fscanf(file,"%s",s)>0){
            t=strlen(s);
            len[an]=t;
            sum+=t;
            
            if(maxl<t) maxl=t;
            
            ini[s[0]]++;
            
            strcpy(a[an++],s);
        }
        
        
    
    
            for(i=0;i<an;i++)
            for(j=i+1;j<an;j++) if(len[i]<len[j]){
                strcpy(s,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],s);
                t=len[i];
                len[i]=len[j];
                len[j]=t;
            }
        
        
        
        x=0;
        u=3;
        
        while(1){
                for(i='a';i<='z';i++) if(ini[i]>=u&&!charused[i]){
                    c[x++]=i;
                    charused[i]=1;
                }
                
                if(x<4) u--;
                else break;
        }
        
        n=maxl;
        
        
        
        while(1){
        
        
        for(i=0;i<n;i++) 
        for(j=0;j<n;j++) g[i][j]=0;
        for(i=0;i<an;i++) used[i]=0;
        
        
    
        
        
    
    
        for(i=0;i<4;i++){
            x=y=0;
            if(i==1) y=n-1;
            else if(i==2) x=n-1;
            else if(i==3){
                    x=n-1;
                    y=n-1;
                }
            
            
            j=i;
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][0]==c[i]){
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        
        
        
        ///four courner
        for(i=0;i<4;i++){
            x=y=0;
            if(i==1) y=n-1;
            else if(i==2) x=n-1;
            else if(i==3){
                    x=n-1;
                    y=n-1;
                }
            
            
            for(j=0;j<4;j++)
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][0]==c[i]){
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        
    
            /*
        
        //zhongjian
        
                x=0;
        y=0;
        for(i=0;i<n;i++){
            
            x++;
            y++;
            
            for(j=4;j<6;j++)
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
                    used[k]=1;
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }                                                                                                                                                                                                                                                                                           
        */
        
        //sibian
        
    
        
        x=y=0;
        for(i=0;i<n;i++){
    
            y++;
            
            j=0;
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
                    used[k]=1;
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        x=0;
        y=n-1;
        for(i=0;i<n;i++){
            
            x++;
            
            j=1;
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
                    used[k]=1;
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        x=n-1;
        y=n-1;
        for(i=0;i<n;i++){
            y--;
            
            j=2;
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
                    used[k]=1;
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        x=n-1;
        y=0;
        for(i=0;i<n;i++){
            
            x--;
            
            j=3;
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
                    used[k]=1;
                    used[k]=1;
                    f(dx[j],dy[j],x,y,a[k]);
                    break;
                }
        }
        
        
        for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        for(l=7;l>=0;l--)
                for(k=0;k<an;k++) if(!used[k]&&pd(dx[l],dy[l],i,j,a[k])){
                    used[k]=1;
                    f(dx[l],dy[l],i,j,a[k]);
                    break;
                }
        
        
        
        
        
    
    
    
        ismin=0;
    
        for(i=0;i<an;i++) if(!used[i])
            ismin=1;
        
        if(ismin) n++;
        
        
        
        else{
            srand(100);
            for(i=0;i<n;i++){
                for(j=0;j<n;j++)  if(g[i][j]) fprintf(fileout,"%c",g[i][j]); else fprintf(fileout,"%c",rand()%26+'a'); 
                fputs("
    ",fileout);
            }
            return 0;
        }
        
    }
    }
  • 相关阅读:
    获取远程服务器的资源情况
    【Hibernate】Hibernate系列8之管理session
    【Hibernate】Hibernate系列7之二级缓存
    【Hibernate】Hibernate系列6之HQL查询
    【Hibernate】Hibernate系列5之检索策略
    【Hibernate】Hibernate系列4之配置文件详解
    【Hibernate】Hibernate系列3之配置文件详解
    【Hibernate】Hibernate系列2之Session详解
    【Hibernate】Hibernate系列1之概述
    【云计算】Dockerfile、镜像、容器快速入门
  • 原文地址:https://www.cnblogs.com/lightz/p/3392151.html
Copyright © 2011-2022 走看看