Here is my attempt. All the borders are correct except for the dual-coloured red line with blue dashes. It's a kludgy solution but shows possible techniques. In the following code I have left in Orange
& Green
to show some of the tricks. They can be switched to Black
to reproduce the graphic. Grid
is used.

m = {{3, 5, 5, 5, 5, 5, 5, 5}, {3, 6, 8, 8, 8, 8, 8, 8}, {3, 6, 10,
11, 11, 11, 11, 11}, {3, 6, 10, 14, 14, 14, 14, 14}, {3, 6, 10,
15, 17, 17, 17, 17}, {3, 6, 10, 15, 20, 20, 20, 20}, {3, 6, 10,
15, 21, 23, 23, 23}, {3, 6, 10, 15, 21, 26, 26, 26}, {3, 6, 10,
15, 21, 28, 29, 29}};
m = MapThread[
Prepend, {Prepend[m, Table["K=" <> ToString[k], {k, 3, 10}]],
Prepend[Table["C=" <> ToString[c], {c, 2, 10}], ""]}];
(* Frame position: {Bottom, Left, Top, Right} *)
m[[1, 3]] =
Item[m[[1, 3]], Frame -> {False, False, False, False},
FrameStyle -> Pink];
m[[1, 4]] =
Item[m[[1, 4]], Frame -> {False, False, False, False},
FrameStyle -> Pink];
m[[2, 2]] =
Item[m[[2, 2]], Frame -> {False, True, True, True},
FrameStyle -> None];
m[[2, 3]] =
Item[m[[2, 3]], Frame -> {True, True, True, False},
FrameStyle -> Red];
m[[2, 4]] =
Item[m[[2, 4]], Frame -> {True, False, True, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[3, 1]] =
Item[m[[3, 1]], Frame -> {False, False, False, True},
FrameStyle -> Orange];
m[[3, 2]] =
Item[m[[3, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[3, 3]] =
Item[m[[3, 3]], Frame -> {False, False, True, True},
FrameStyle -> Red];
m[[3, 9]] = Item[m[[3, 9]], Frame -> False, FrameStyle -> None];
m[[3, 5]] =
Item[m[[3, 5]], Frame -> {True, True, False, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[3, 6]] =
Item[m[[3, 6]], Frame -> {True, False, False, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[4, 2]] =
Item[m[[4, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[4, 4]] =
Item[m[[4, 4]], Frame -> {False, False, True, True},
FrameStyle -> Red];
m[[4, 7]] =
Item[m[[4, 7]], Frame -> {True, True, False, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[4, 8]] =
Item[m[[4, 8]], Frame -> {True, False, False, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[5, 2]] =
Item[m[[5, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[5, 4]] =
Item[m[[5, 4]], Frame -> {False, False, False, True},
FrameStyle -> Red];
m[[5, 7]] =
Item[m[[5, 7]], Frame -> {False, False, True, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[5, 8]] =
Item[m[[5, 8]], Frame -> {False, False, True, True},
FrameStyle -> Directive[Blue, Dashed]];
m[[6, 2]] =
Item[m[[6, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[6, 5]] =
Item[m[[6, 5]], Frame -> {False, False, True, True},
FrameStyle -> Red];
m[[6, 9]] =
Item[m[[6, 9]], Frame -> {False, False, True, False},
FrameStyle -> Directive[Blue, Dashed]];
m[[7, 2]] =
Item[m[[7, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[7, 6]] =
Item[m[[7, 6]], Frame -> {True, True, False, False},
FrameStyle -> Red];
m[[8, 2]] =
Item[m[[8, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[8, 6]] =
Item[m[[8, 6]], Frame -> {False, False, True, True},
FrameStyle -> Red];
m[[9, 2]] =
Item[m[[9, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[9, 7]] =
Item[m[[9, 7]], Frame -> {True, True, False, False},
FrameStyle -> Red];
m[[10, 2]] =
Item[m[[10, 2]], Frame -> {False, True, False, False},
FrameStyle -> None];
m[[10, 8]] =
Item[m[[10, 8]], Frame -> {False, True, False, False},
FrameStyle -> Red];
Grid[m, Dividers -> {{2 -> Green, 3 -> Red}, {2 -> Green, 4 -> Red}},
ItemSize -> 4]
Graphics
primitives. (Which also circumvents bugs inGrid
.) This is hardly convenient and difficult to make general however. $\endgroup$