程序截图
这是基本版本截图。。。。空都没填上
四个角的话 可以留下四个单词 最后添上就行
程序思路
在一个大平面上先一个中心,然后从中心向四周填词
每次填词时,寻找一个使得矩阵最小的
代目如下
#include <stdio.h> #include <string.h> #include <ctype.h> #define WORDLEN 12 #define MID 15 #define UP 0 #define UP_R 1 #define RIGHT 2 #define DOWN_R 3 #define DOWN 4 #define DOWN_L 5 #define LEFT 6 #define UP_L 7 int debug = 1; char dictionary[100][WORDLEN]; char Word[100][100]; int dictSign[100]={0}; int dictSize; int a[2]; static void readDictionary(char *dictName) { FILE *h; char s[80]; int i; dictSize = 0; h = fopen(dictName, "rt"); fgets(s, 80, h); while (!feof(h)) { s[strlen(s)-1] = '\0'; /* get rid of newline */ strcpy(dictionary[dictSize++], s); fgets(s, 80, h); } printf("Dictionary size is %d\n", dictSize); for(i=0; i<dictSize; i++){ printf("%s\n",dictionary[i]); } } int getMax(){ int max=0,which=0; int all=0; for(int i=0; i<dictSize; i++){ if(dictSign[i] == 1) continue; int len = strlen(dictionary[i]); if(max < len){ max = len; which = i; all = 1; dictSign[i] = 1; } } if(all == 0) return -1; return which; } bool input(int x,int y,char *s,int direction){ int len = strlen(s); switch(direction){ case UP : for(int i=0; i<len; i++){ if(s[i] != Word[x-i][y] && Word[x-i][y] != 0) return false; } for(int i=0; i<len; i++) Word[x-i][y]=s[i]; break; case UP_R: for(int i=0; i<len; i++){ if(s[i] != Word[x-i][y+i] && Word[x-i][y+i] != 0) return false; } for(int i=0; i<len; i++) Word[x-i][y+i]=s[i]; break; case RIGHT: for(int i=0; i<len; i++){ if(s[i] != Word[x][y+i] && Word[x][y+i] != 0) return false; } for(int i=0; i<len; i++) Word[x][y+i]=s[i]; break; case DOWN_R: for(int i=0; i<len; i++){ if(s[i] != Word[x+i][y+i] && Word[x+i][y+i] != 0) return false; } for(int i=0; i<len; i++) Word[x+i][y+i]=s[i]; break; case DOWN: for(int i=0; i<len; i++){ if(s[i] != Word[x+i][y] && Word[x+i][y] != 0) return false; } for(int i=0; i<len; i++) Word[x+i][y]=s[i]; break; case DOWN_L: for(int i=0; i<len; i++){ if(s[i] != Word[x+i][y-i] && Word[x+i][y-i] != 0) return false; } for(int i=0; i<len; i++) Word[x+i][y-i]=s[i]; break; case LEFT: for(int i=0; i<len; i++){ if(s[i] != Word[x][y-i] && Word[x][y-i] != 0) return false; } for(int i=0; i<len; i++) Word[x][y-i]=s[i]; break; case UP_L: for(int i=0; i<len; i++){ if(s[i] != Word[x-i][y-i] && Word[x-i][y-i] != 0) return false; } for(int i=0; i<len; i++) Word[x-i][y-i]=s[i]; break; } return true; } void getWhere(int n){ int layer; int n8=0; for(int i=1; ;i++){ n8 += i*8; if(n <= n8){ layer = i; n8 -= i*8; n = n-n8; int many = (n-1)/(i*2); switch(many){ case 0: a[0] = MID-i-1+n; a[1] = MID-i; break; case 1: a[1] = MID-i+(n-1)%(i*2); a[0] = MID+i; break; case 2: a[0] = MID+i-(n-1)%(i*2); a[1] = MID+i; break; case 3: a[1] = MID+i-(n-1)%(i*2); a[0] = MID-i; break; } break; } } } int getDirect(int x, int y){ if(x>MID){ if(y>MID) return DOWN_L; else if(y==MID) return LEFT; else return UP_L; } else if(x == MID){ if(y > MID) return DOWN; else return UP; } else{ if(y>MID) return DOWN_R; else if(y==MID) return RIGHT; else return UP_R; } } void ws_maker(){ //printf("%d\n",getMax()); char *s = dictionary[0]; input(MID,MID,s,DOWN); //printf("%s\n",s); for(int i=0,j=1; i<dictSize-1;i++){ int judge=0; s = dictionary[i+1]; if(debug){ printf("%d %s\n",i,s); } for(; ;j++){ getWhere(j); int startD = (getDirect(a[0],a[1])+1)%8; for(int k=1; k<=8; k++){ if(input(a[0],a[1],s,startD%8)){ judge = 1; break; } } if(judge == 1) break; } } } int main(int argc, char **argv) { //printf("sb%s%d\n",*argv,argc); /* read in the dictionary */ readDictionary(argv[1]); ws_maker(); //input(8,2,"love",UP); //input(8,1,"fove",UP_R); if(debug) for(int i=0; i<30; i++){ for(int j=0; j<30; j++) printf("%C",Word[i][j]); printf("\n"); } }
| Personal Software Process Stages | 时间百分比(%) | 实际花费的时间 (分钟) | 原来估计的时间 (分钟) |
Planning | 计划 | 20 | 30 | 0 |
· Estimate | · 估计这个任务需要多少时间,把工作细化并大致排序 | 20 | 30 | 0 |
Development | 开发 | 60 | 90 | 70 |
· Analysis | · 需求分析 (包括学习新技术) | 10 | 15 | 0 |
· Design Spec | · 生成设计文档 | 0 | 0 | 0 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 | 0 |
· Coding Standard | · 代码规范 (制定合适的规范) | 0 | 0 | 0 |
· Design | · 具体设计 | 5 | 7.5 | 10 |
· Coding | · 具体编码 | 20 | 30 | 45 |
· Code Review | · 代码复审 | 5 | 7.5 | 10 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 30 | 5 |
Reporting | 总结报告 | 20 | 30 | 30 |
· Test Report | · 测试报告 | 10 | 15 | 10 |
· Size Measurement | · 计算工作量 | 5 | 7.5 | 10 |
· Postmortem & Improvement Plan | · 事后总结, 并提出改进 | 5 | 7.5 | 10 |
Total | 总计 | 100% | 总用时150 | 总估计的用时 100 |