如何实现3邻接矩阵回溯?

时间:2014-01-25 11:01:52

标签: c++ matrix backtracking

问题:

为每个ministery(组织化)提供最佳解决方案,将serverAdministrators(人员)和服务器(计算机)配对。 最佳解决方案意味着每个服务器管理员和服务器的平均知识是最大的。

我有什么:

具有serverAdministrator(行)和ministery(列)兼容性的邻接矩阵[NxN]。

--Matrix serverAdministrator and ministery
0 1 0 0
1 0 1 0
0 1 1 1
0 1 0 0

另一个矩阵[NxN]与服务器(行)和ministery(列)兼容。

--Matrix server and ministery
1 1 1 0
1 1 1 1
0 0 1 0
0 1 0 1

最后,为了得到最好的结果,我有另一个邻接矩阵[NxN],每个计算机(列)的每个管理员(行)知识[0..10]。

--Matrix of knowledge of each administrator for each computer
5 9 8 1
3 8 6 4
9 7 1 4
3 3 1 9

这项功课必须使用C ++中的回溯算法

~~~

我读过Niklaus Wirth - [Data structures and algorithms]并发现最好的选择是实施稳定婚姻算法,但这是我的第一次,我不可能找到一个例子与谷歌。 (如果你能找到某个人,那将是非常吝啬的)

我需要什么:

使用C ++解决问题的一个例子。使用3个类(我们的老师告诉我们如何实现回溯)

candidates.h <-- this classes is giving us the next element to try in the algorithm
                 It has methods like: next(), end(), etc..
solution.h <-- we have the adjacency-matrix here and also methods like: isBetter(),
               solutionComplete, putInSolution(candidate &c)
               pop_upSolution (candidate &c), etc.
solver.h <-- this is where we have the backtracking algorithm

对于邻接矩阵,数据结构是:

vector <bitset<1> >      for the first and second adjacency-matrix
vector <vector <int> >   fot the last adjacency-matrix (knowledge)

问题

此外,以及如何解决这个问题的例子,我有最后一个问题:

Can I use any "mathematical" property with the first 2 matrix and simplify the 
algorithm (or get one more efficient) by using functions like AND, XAND between
the matrix?

0 个答案:

没有答案