成语接龙,哈希表神马的最给力了。

  
    
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
public class Idiom
{
public static Dictionary < Char, List < int >> Dict = new Dictionary < char , List < int >> ();
public static List < Idiom > IdiomList = new List < Idiom > ();
static Idiom()
{
string [] Arr = File.ReadAllLines(Environment.CurrentDirectory + @" \idiom.txt " ,Encoding.UTF8);
for ( int i = 0 ; i < Arr.Length; i ++ )
{
Idiom I
= new Idiom(i, Arr[i]);
IdiomList.Add(I);
if ( ! Dict.ContainsKey(I.Head))
{
Dict.Add(I.Head,
new List < int > ());
}
Dict[I.Head].Add(I.ID);
}
}
public Idiom( int id, string word )
{
ID
= id;
Word
= word;
char [] C = word.ToCharArray();
Head
= C[ 0 ];
Tail
= C[word.Length - 1 ];
}
public string Word;
public int ID;
public char Tail;
public char Head;
}
}

  
    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
public class Dragon
{
public Dragon(Idiom I )
{
Body.Add(I.ID);
Tail
= I.Tail;
}
public Dragon(Dragon D, Idiom I)
{
Body
= new HashSet < int > (D.Body);
Body.Add(I.ID);
Tail
= I.Tail;
}
public HashSet < int > Body = new HashSet < int > ();
public Char Tail{ get ; set ;}
}
}

  
    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;

namespace ConsoleApplication1
{
class Program
{

static Stopwatch SW = new Stopwatch();
static bool Finish = true ;
static Dragon maxDragon = null ;
static int maxLength = 1 ;
static void Main( string [] args)
{
SW.Start();
char input = ' ' ;
if (Idiom.Dict.ContainsKey(input))
{
List
< int > First = Idiom.Dict[input];
foreach ( int i in First)
{
Dragon D
= new Dragon(Idiom.IdiomList[i]);
if (Finish) { maxDragon = D; Finish = false ; }
DFS(D);
}
}
else
{
Console.WriteLine(
" 输入的词不存在 " );
}

Console.Read();
}

private static void DFS(Dragon D)
{

if (SW.ElapsedMilliseconds > 1000 && ! Finish)
{
SW.Stop();

if (maxDragon.Body.Count == maxLength)
{
foreach ( int i in maxDragon.Body)
{
Console.Write(Idiom.IdiomList[i].Word
+ " , " );
}
Console.WriteLine(maxDragon.Body.Count);
}

Finish
= true ;
return ;
}
if (Finish) { return ; }
if (Idiom.Dict.ContainsKey(D.Tail))
{
foreach ( int i in Idiom.Dict[D.Tail])
{
if ( ! D.Body.Contains(i)) // 无环
{
Dragon newDragon
= new Dragon(D, Idiom.IdiomList[i]);
if (newDragon.Body.Count > maxDragon.Body.Count)
{
maxDragon
= newDragon;
maxLength
= newDragon.Body.Count;
}
DFS(newDragon);
}
}
}
}
}
}

你可能感兴趣的:(哈希表)