【发布时间】:2015-08-13 15:26:02
【问题描述】:
我试图用多个参数(点和类型)填充一棵树,最后显示哪个“分支”具有最大点数,并在每个分支中显示我有多少相等的元组。
树会是这样的:
父亲(点数:200|类型:2) |_CHILD01 (P:120|类型:3) | |_CHILD4 (P:300|T:3) | | |_CHILD8 (P:220|T:3) | | |_CHILD9 (P:65|T:1) | |_CHILD5 (P:15|T:9) |_CHILD2 (P:10|T:1) |_CHILD3 (P:80|T:2) |_CHILD6 (P:25|T:2) | |_CHILD10 (P:110|T:7) | |_CHILD11 (P:195|T:3) |_CHILD7 (P:50|T:7)而我想要得到的是:
每个分支机构的点数: Branch01 -> 父亲 (200), CHILD01 (120), CHILD04 (300), CHILD08 (220) -> TotalPoints: 840 Branch02 -> 父亲 (200), CHILD01 (120), CHILD04 (300), CHILD09 (65) -> 总分:685 Branch03 -> 父亲 (200), CHILD01 (120), CHILD05 (15) -> TotalPoints: 335 Branch04 -> 父亲 (200), CHILD02 (10) -> 总分:210 Branch05 -> 父亲 (200), CHILD03 (80), CHILD06 (25), CHILD10 (110) -> 总分:415 Branch06 -> 父亲 (200), CHILD03 (80), CHILD06 (25), CHILD11 (195) -> 总分:500 Branch07 -> 父亲 (200), CHILD03 (80), CHILD07 (50) -> TotalPoints: 330和
计算哪个分支中的类型数量: TypePerBranch01: - 类型1:0 - 类型2:1 - 类型3:2 - 类型4:1 - 类型5:0 - 类型6:0 - 类型7:0 - 类型8:0 - 类型9:0 TypePerBranch02: - 类型1:1 - 类型2:1 - 类型3:1 - 类型4:1 - 类型5:0 - 类型6:0 - 类型7:0 - 类型8:0 - 类型9:0 TypePerBranch03: - 类型1:0 - 类型2:1 - 类型3:1 - 类型4:0 - 类型5:0 - 类型6:0 - 类型7:0 - 类型8:0 - 类型9:1 TypePerBranch04: - 类型1:1 - 类型2:1 - 类型3:0 - 类型4:0 - 类型5:0 - 类型6:0 - 类型7:0 - 类型8:0 - 类型9:0 TypePerBranch05: - 类型1:0 - 类型2:3 - 类型3:0 - 类型4:0 - 类型5:0 - 类型6:0 - 类型7:1 - 类型8:0 - 类型9:0 TypePerBranch06: - 类型1:0 - 类型2:3 - 类型3:1 - 类型4:0 - 类型5:0 - 类型6:0 - 类型7:0 - 类型8:0 - 类型9:0 TypePerBranch07: - 类型1:0 - 类型2:2 - 类型3:0 - 类型4:0 - 类型5:0 - 类型6:0 - 类型7:1 - 类型8:0 - 类型9:0我已经完成了一些代码,但它不起作用。 函数如下:
//
// FUNÇÃO ResizeArray
public T[,] ResizeArray<T>(T[,] original, int xSize, int ySize)
{
var newArray = new T[xSize, ySize];
var xMin = Math.Min(xSize, original.GetLength(0));
var yMin = Math.Min(ySize, original.GetLength(1));
for (var x = 0; x < xMin; x++)
for (var y = 0; y < yMin; y++)
newArray[x, y] = original[x, y];
return newArray;
}
//
// FUNÇÃO TreeBranchPath
int[] TotalPontosRamo = new int[1];
int[,] FolhaInfoPontos = new int[1, 1];
int[,] FolhaInfoPatamar = new int[1, 1];
int CountRamos = 0;
private void TreeBranchPath(int idusr, int usrpnts, int usrpata, int nivelnum, int ramonum)
{
FolhaInfoPontos[nivelnum, ramonum] = usrpnts;
FolhaInfoPatamar[nivelnum, ramonum] = usrpata;
var AfilhadosList = (from af in db.NRV_USERS
where af.idpatrocinador == idusr
select af).ToList();
/*Se for NULL não tem descendentes */
if (AfilhadosList != null)
{
int CountNumFilhos = AfilhadosList.Count();
int CountFilhos = 0;
nivelnum = nivelnum + 1;
FolhaInfoPontos = ResizeArray(FolhaInfoPontos, nivelnum, ramonum + CountNumFilhos);
FolhaInfoPatamar = ResizeArray(FolhaInfoPatamar, nivelnum, ramonum + CountNumFilhos);
foreach (var descid in AfilhadosList)
{
CountFilhos = CountFilhos + 1;
/* Inicio - Quantos Pontos o User tem */
var UserPoints = (from pnt in db.NRV_USERPONTOS
where pnt.iduser == descid.id_user && pnt.usrpntact == true
select pnt).FirstOrDefault();
int TotalUserPoints = UserPoints.pontosgrupo + UserPoints.pontosproprios;
/* Fim - Quantos Pontos o User tem */
TotalPontosRamo[CountRamos] = TotalPontosRamo[CountRamos] + TotalUserPoints;
/* Inicio - Em que Patamar o User está */
var AuxUserPatamar = (from cp in db.NRV_USERPATAMAR
where cp.iduser == idusr
select cp.idpatamax).FirstOrDefault();
/* Fim - Em que Patamar o User está */
Array.Resize(ref TotalPontosRamo, CountRamos + 1);
TreeBranchPath(descid.id_user, TotalUserPoints, AuxUserPatamar, nivelnum, CountFilhos);
}
}
else
{
return;
}
}
有人可以帮助我吗?
【问题讨论】:
-
我认为您无法得到答案,因为您的问题不清楚。例如,如果原始结构中不存在 -Type4 是什么?
-
对不起,我忘记了:
父亲 (Points:200|Type:2) |_CHILD01 (P:120|Type:3) | |_CHILD4 (P:300|T:3) | | |_CHILD8 (P:220|T:3) | | |_CHILD9 (P:65|T:1) | |_CHILD5 (P:15|T:9) |_CHILD2 (P:10|T:1) |_CHILD3 (P:80|T:2) |_CHILD6 (P:25|T:2) | |_CHILD10 (P:110|T:7) | |_CHILD11 (P:195|T:3) |_CHILD7 (P:50|T:7)
-
@RicardoSousa -- 我有两个建议。首先,我认为您应该更具体(非常具体)关于当前代码“不起作用”的内容。其次,我认为您应该在上面的评论中获取信息(使用`
标签和树数据)并将其包含在您的问题中——在评论中阅读太难了。
标签: c# recursion multidimensional-array