一个关于无向图遍历的问题

输入一些二元组,每个表示两个节点之间有一条通路。再输入一个顶点,一个终点,求出一共有多少种走法(不包括回路)。用C#或者Java实现

来个田字格的

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input1 = @"a,b
b,c
a,d
b,e
c,f
d,e
e,f
d,g
e,h
f,i
g,h
h,i";
            foreach (var item in Solve(input1, "", "a", "i"))
                Console.WriteLine(item);
        }

        static IEnumerable<string> Solve(string input, string prepath, string start, string end)
        {
            if (start == end)
            {
                yield return prepath + end;
                yield break;
            }
            var query = input.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Split(',')[0] + x.Split(',')[1]).Where(x => x.Contains(start) && !prepath.Contains(x.Replace(start, "")));
            foreach (var item in query)
            { 
                foreach (var item1 in Solve(input, prepath + start, item.Replace(start, ""), end))
                    yield return item1;
            }
        }
    }
}

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input1 = @"a,b
b,c
b,d
d,e
d,f"; // 工字形
            foreach (var item in Solve(input1, "", "a", "f"))
                Console.WriteLine(item);
        }

        static IEnumerable<string> Solve(string input, string prepath, string start, string end)
        {
            if (start == end)
            {
                yield return prepath + end;
                yield break;
            }
            var query = input.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Split(',')[0] + x.Split(',')[1]).Where(x => x.Contains(start) && !prepath.Contains(x));
            foreach (var item in query)
            { 
                foreach (var item1 in Solve(input, prepath + start, item.Replace(start, ""), end))
                    yield return item1;
            }
        }
    }
}

#include
using namespace std;

//--------------------------------------------------------无向图的邻接多重表存储结构的定义
const int NUM=20;
const int Data_Num=2;//每个顶点所表示的数据
typedef char VertexType[Data_Num];

typedef struct EBox
{
int mark;//访问标记,1代表已访问,0代表未访问
int ivex,jvex;//该边依附的两个顶点的位置
struct EBox *ilink,*jlink;//分别指向依附这两个顶点的下一条边
//InfoType *info;//该边信息指针
}EBox;
typedef struct VexBox
{
VertexType data;
EBox *firstedge;//指向第一条依附该顶点的边
}VexBox;
typedef struct
{
VexBox adjmulist[NUM];
int vexnum,edgenum;//无向图的当前顶点数和边数
}AMLGraph;

//---------------------------------------------------队列的定义
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;

}QNode,*QueuePtr;

typedef struct
{
QueuePtr front,rear;

}LinkQueue;

//寻找输入的数据在图中的位置,若不存在则返回-1
int LocateVex(AMLGraph G,VertexType u)
{
int i;
for(i=0;i if(strcmp(u,G.adjmulist[i].data)==0)
return i;
return -1;
}
//采用邻接多重表存储表示,构造无向图G
int CreateGraph(AMLGraph &G)
{
cout cin>>G.vexnum;//输入图当前的顶点数
cin>>G.edgenum;//输入图当前的边数

详细内容请参考:

http://wenku.baidu.com/view/bf8e06136c175f0e7cd13700.html

之前的程序有点问题

abdf
af
请按任意键继续. . .

输出
abcfedghi
abcfehi
abcfi
abedghi
abefi
abehi
adebcfi
adefi
adehi
adghebcfi
adghefi
adghi
请按任意键继续. . .