程序设计大赛—文字游戏

 

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

给出一组单词,判断是否可以将单词排序,使得每个单词的第一个字母和前一个单词的最后一个字母相同。

输入格式:

每一行为一整数 C ,表示测试数据的组数目。每组测试数据的第一行为整数 N 1<=N<=100000 , 接下来的 N 行,每行为一个单词,每个单词都只包含小写字母并且最多包含 1000 个字符。

输出格式:

如果不能将单词序列重组以满足要求,则输出一行“ Impossible ”,否则输出“ Possible .

输入样本:

3

2

ok

ok

2

ok

ko

3

Effects

Cse

Seu

输出样本:

Impossible

Possible

Possible

我的程序:

/***************************************************

程序名:文字游戏

作者:许文发

时间: 2009-11-23

***************************************************/

#include<iostream.h>

#include<string.h>

#include<stdio.h>

int first=1;// 第一次输出标志, 1 代表是, 0 代表否

// 判断整形数组 able 是否全为 1 ,是则返回 1 ,否则返回 0

int isone(int able[],int num)

{

       int result=1;

       for(int i=0;i<num;i++)

       {

              if(able[i]==0)

                     result=0;

       }

       return result;

      

}

// 回溯算法

void words(char start[],char end[],int able[],int prev,int num)

{

       int j;

       if(isone(able,num) && able[num]==0)

       {

              able[num]=1;

       }

       else

       {

              for(j=0;j<num;j++)

              {

                     if(end[prev]==start[j] && able[j]==0)

                     {

                            able[j]=1;

                            words(start,end,able,j,num);

                            able[j]=0;

                     }

              }

       }

}

// 清空文件

void clearfile()

{

       FILE *pt;

       pt=fopen("output.txt","w");

       fclose(pt);

}

// 写文件

void mywrite(int n,int first)

{

       FILE *pt;

       pt=fopen("output.txt","a");

       if(first==1)

       {

              if(n==1)

                     fprintf(pt,"Possible");

              else

                     fprintf(pt,"Impossible");

       }

       else

       {

              if(n==1)

                     fprintf(pt,"/nPossible");

              else

                     fprintf(pt,"/nImpossible");

       }

       fclose(pt);

}

// 主函数

void main()

{

       clearfile();

       FILE *pt;

       char aa[1000];

       char start[100000],end[100000];

       int able[100000];

       int i,ii;

       int total,m;

       if(NULL==(pt=fopen("input.txt","r")))

       {

       }

       else

       {

              fscanf(pt,"%d",&total);

              for(ii=0;ii<total;ii++)

              {

                     fscanf(pt,"%d",&m);

                     for(i=0;i<100000;i++)

                            able[i]=0;

                     for(i=0;i<m;i++)

                     {

                            fscanf(pt,"%s",aa);

                            start[i]=aa[0];

                            end[i]=aa[strlen(aa)-1];

                     }

                     for(i=0;i<m;i++)

                     {

                            if(able[m]==0)

                            {

                                   able[i]=1;

                                   words(start,end,able,i,m);

                                   able[i]=0;

                            }

                            else

                                   break;

                     }

            mywrite(able[m],first);

                     first=0;

              }

              fclose(pt);

       }

}

输入:

3

2

ok

eo

13

ege

hhs

sign

nine

edit

two

one

enn

text

th

high

sws

sst

2

ok

ok

输出:

Possible

Possible

Impossible

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值