K
来源:互联网 发布:360软件认证后台 编辑:程序博客网 时间:2024/04/28 20:39
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4601
思路:
如果有环,那么直接循环造一个20*20的图即可。
如果没有,那么就找到那个最长的串,看其能构成最大的正方形就可以了。
#include <bits/stdc++.h>using namespace std;const int MAXN=1000;bool q[30][30];char ans[30],temp[30];bool vis[30];int flag,ans_l;int n;int loop;void dfs(int x,int cnt){ if(flag)return; vis[x]=1; temp[cnt-1]=x+'a'; if(cnt>ans_l) { temp[cnt]=0; ans_l=cnt; strcpy(ans,temp); } for(int i=0; i<26; ++i) { if(!q[x][i]) { if(i!=loop) { if(!vis[i]) dfs(i,cnt+1); } else { temp[cnt]=0; ans_l=cnt; strcpy(ans,temp); flag=1; } } if(flag)return; } vis[x]=0;}int main(){ int t; int i,j; char s[10]; scanf("%d",&t); while(t--) { memset(q,0,sizeof(q)); scanf("%d",&n); for(i=0; i<n; ++i) { scanf("%s",s); q[s[0]-'a'][s[1]-'a']=1; } flag=0; ans_l=0; for(i=0; i<26; ++i) { memset(vis,0,sizeof(vis)); loop=i; dfs(i,1); if(flag)break; } if(!flag) { int l=(ans_l+1)/2; int t=0; for(i=1; i<=l; ++i) { for(j=t; j<t+l; ++j) { printf("%c",ans[j]); } puts(""); t++; } } else { int t=0; int l=ans_l; for(i=1; i<=20; ++i) { for(j=0; j<20; ++j) { printf("%c",ans[(j+t)%l]); } puts(""); t++; } } } return 0;}
1 0
- k
- k
- k,
- k
- k
- k
- K -
- K
- K
- K
- K
- K
- k
- K
- K
- K
- K
- K
- C语言编程规范
- 简单理解Socket
- SPRING
- 【前端优化】样式化加载失败的图片
- 【5】初识Linux
- K
- 对于仿函数的记录
- qtouch跨平台组态软件四位一体表现
- Angular.js简易信息发布系统!ngRoute路由配置
- RCF—用于C++的进程间通讯(转自http://www.cnblogs.com/adylee/archive/2009/07/07/1518397.html)
- 微信公众平台开发
- 大数据学习笔记之三十六 NewSQL相关知识
- shell, subshell, pipes and exit
- C内存理解-门槛题