【现代程序设计】【homework-04】_weixin_30822451的博客-程序员资料

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("\n",fileout);
        }
        return 0;
    }
    
}
}

 

转载于:https://www.cnblogs.com/lightz/p/3392151.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30822451/article/details/97518475

智能推荐

python练习爬虫的时候出现以下错误,ProgrammingError: (1146, “Table ‘lianjia.house‘ doesn‘t exist“),求帮忙_romantickai的博客-程序员资料

import pymysqlimport requests from bs4 import BeautifulSoup获取url下面的页面内容,返回soup对象def get_page(url): responce = requests.get(url) soup = BeautifulSoup(responce.text,’lxml’) retur...

window.performance_Min_Fox的博客-程序员资料

window.performanceperformance是W3C基于前端对性能的需求下推出的一套性能API标准。用户输入URL到用户使用页面全过程时间统计,会返回一个PerformanceTiming对象,单位为毫秒1. 几个关键的点:(1)fetchStart:发起获取当前文档的时间,我理解是浏览器收到页面发起请求的时间点。(2)domainLookupStart:返回浏览器开始DNS查询的时间,如果此请求没有DNS查询过程,如长连接,资源Cache,或是本地资源,那么就返回fetchStar

如何判断微信android和IOS_weixin_34198583的博客-程序员资料

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

查看系统中支持CUDA的设备数量和属性---deviceQuery示例_rs勿忘初心的博客-程序员资料

      在你安装了CUDA显卡驱动之后,需要检测是否安装正确,或者需要查看系统中支持CUDA的设备数量和属性,可以通过SDK中的deviceQuery示例来查看,工程目录位置:C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0,需要注意的是C:\ProgramData为默认隐藏目录,你在菜单栏中让其显示即可,方法如下图所示:         ...

Java打包文件目录问 zip文件_chuhui1765的博客-程序员资料

Java打包文件目录问 zip文件。 /** * 资源打包下载类 * Created by Ruan Banshu on 2015/4/13. */public class ZipOpUtil { private static Logger logger = Lo...

4、Linux下Maven项目构建与管理工具_linux maven 初始化_xyphf_和派孔明的博客-程序员资料

1、在developer下下载Mavenwget http://learning.happymmall.com/maven/apache-maven-3.0.5-bin.tar.gz2、解压Maventar -zxvf apache-maven-3.0.5-bin.tar.gz3、修改环境变量sudo vim /etc/profile查看maven路径cd bi...

随便推点

使用EasyExcel解析表格时报错ExcelAnalysisException: File type error,io must be available markSupported_一米阳光zw的博客-程序员资料

问题描述:在使用EasyExcel解析Excel表格的时候报错了,我一开始使用的是指定文件类型的方式进行解析,文件的格式是xls的格式,方法是原来带有文件枚举类型的方法进行解析,其实这样也是不会报错的,如下:后来看这个过时方法有点别扭打算给他换掉如下图,就点进去看到类似的方法,换成不带类型的进行解析,就报如文章所提到的错,其实里面ExcelTypeEnum excelTypeEnum = E...

实现顺序查找的算法_实验题1:实现顺序查找的算法目的:领会顺序查找的过程和算法设计。内容:编写一_静能生悟的博客-程序员资料

/***    实验题目:*        实现顺序查找的算法*    实验目的:*        领会顺序查找的过程和算法设计*    实验内容:*        设计程序,输出在顺序表(3, 6, 2, 10, 1, 8, 5, 7, 4, 9)中采用*    顺序查找方法查找关键字5的过程**/#include &amp;lt;stdio.h&amp;gt;#define MAX_...

GDOI2017模拟第四轮总结_Akakii的博客-程序员资料

Day1T1应该是推式子+SA,比较麻烦,先打50分暴力。 T2原题,但是不太记得具体怎么做。 T3乍一看以为是状压DP。 T4又是见过的原题,但是这题比较难,之前看的时候没有搞懂。 然后开始码T1,50分暴力。出了一点小状况,我的式子推的有问题,结果调试花了太长时间,大大超出预算。然后就赶紧码了T3和T4暴力。回过头来刚T2,花了点时间重新推出正解,打完之后又写了一个暴力,但是只剩5min

五大浏览器内核_列举5个浏览器内核_一个小阿雷、的博客-程序员资料

1、IE浏览器 内核Trident2、Mozilla Firefox(火狐) 内核Gecko(开源)3、Chrome(谷歌) 内核最初是Webkit 最新:Blink4、Safari(苹果) 内核Webkit5、Opera(欧朋) (曾被认为是世界上最快的浏览器) 内核:最初Presto 现在:Blink...

UML中常用的几种图_uml中的图_小菜鸟hahha的博客-程序员资料

浅谈UML中常用的几种图1 UML简介2 UML常见图分类3 用况图(用例)4 类图简单类图使用 举例5 其他辅助用图时序图(顺序图)协作图(Collaboration Diagram/communication Diagram)/通信图状态图活动图(Activity Diagram)6 组件图(ComponentDiagram)、配置图(Deployment Diagram)Update Time:2020年1月5日20:17:47 Author:要你命三千又 三千 type:笔

.Net Core上传组件_.Net Core图片上传处理组件_uploadhandlecore_天马3798的博客-程序员资料

一、.Net Core上传组件Uploader简介1.前端jquery框架封装2.后端,支持Asp.Net 和 Asp.Net Core 矿建3.数据传输模式支持:WebScoket 、Ajax、Form 模式上传到服务器。最新版本资料请参考官网:http://www.gongjuji.net/uploader/二、Asp.Net Core 使用步骤 (此案例这对WebScoket方式讲解)注意:跟多上传方式接收,请去官网了解。第一步:安装组件 ,根据.net Core框架.

推荐文章

热门文章

相关标签