输入一些二元组,每个表示两个节点之间有一条通路。再输入一个顶点,一个终点,求出一共有多少种走法(不包括回路)。用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
请按任意键继续. . .