Итак, у меня есть двумерный массив строк, например:
char str[12][100] = {
"a = 2.b, 1.d",
"b = 2.a, 1.e, 2.c",
"c = 2.b, 1.f",
"d = 1.a, 1.g",
"e = 1.h, 1.b",
"f = 1.i, 1.c",
"g = 1.j, 1.d",
"h = 1.k, 1.e",
"i = 1.l, 1.f",
"j = 1.g, 2.k",
"k = 2.j, 1.h, 2.l",
"l = 2.k, 1.i"
};
Эти строки представляют макет карты, где точка «a» соединена с точкой «b» и «d» и естьсоответствующее расстояние (или вес) между точками, которые связаны с точкой "а".Вот как выглядит макет при преобразовании из всех этих строк:
a--(2)--b--(2)--c
| | |
(1) (1) (1)
| | |
d e f
| | |
(1) (1) (1)
| | |
g h i
| | |
(1) (1) (1)
| | |
j--(2)--k--(2)--l
И у меня есть такая структура:
struct stopPoints {
int weights[10];
char connectingPoints[10];
};
Я успешно взял каждую строку, ипоместите каждую букву и цифру в свою структуру.Я сделал это, создав массив структур наподобие этого: struct stopPoints store[26];
, а затем я продолжал заполнять каждую структуру итеративно, добавляя соответствующий элемент каждой строки.Например, для моей первой строки "a = 2.b, 1.d"
я положил буквы "a", "b" и "d" в store[0].connectingPoints[0], store[0].connectingPoints[1], and store[0].connectingPoints[2],
соответственно.Так вот так:
store[0].connectingPoints[0] = 'a';
store[0].connectingPoints[1] = 'b';
store[0].connectingPoints[2] = 'd';
Я также вставил два числа в элемент "весов" структуры, например так:
store[0].weights[0] = 2;
store[0].weights[1] = 1;
Я проверил это для всех12 строк и все на месте.
Теперь я хочу создать матрицу смежности из этих строк, которые у меня есть.Вот как должна выглядеть матрица смежности:
0 2 0 1 0 0 0 0 0 0 0 0
2 0 2 0 1 0 0 0 0 0 0 0
0 2 0 0 0 1 0 0 0 0 0 0
1 0 0 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 1
0 0 0 0 0 0 1 0 0 0 2 0
0 0 0 0 0 0 0 1 0 2 0 2
0 0 0 0 0 0 0 0 1 0 2 0
Чтобы объяснить немного больше, первая строка [0] (представляет точку "a") содержит 2 в индексе [0] [1] (представляет расстояние до точки "b") и содержит 1 в индексе [0] [3] (представляет расстояние до точки "d").
Таким образом, вторая строка [1] содержит 2в индексе [1] [0] и [1] [2], поскольку точка b соединена с точкой a и точкой c, а индекс [1] [5] содержит 1, поскольку точка b также связана с точкой e.Как видите, каждая строка и столбец фактически представляют буквы al в порядке (0 = a, 1 = b, 2 = c и т. Д.).
Я уже инициализировал и заполнил массив 12x12 всеми 0.Кажется, я просто не могу правильно заполнить свои значения веса соответствующим индексом.Вот один из моих многих неудачных подходов:
int row2, col2, ugh=1;
for (row2 = 0; row2 < 12; row2++){
for (col2 = 0; col2 < 12; col2++){
while(store[row2].connectingPoints[ugh] != NULL){
adjmatrix[row2][col2] = store[row2].weights[col2];
ugh++;
}
}
}
Вот как вы бы жестко закодировали первые две строки в матрицу смежности:
//a=2b, 1d;
adjmatrix[0][0] = 0; //point a
adjmatrix[0][1] = store[0].weights[0];
adjmatrix[0][3] = store[0].weights[1];
//b=2a, 2c, 1e;
adjmatrix[1][0] = store[1].weights[0];
adjmatrix[1][1] = 0; //point b
adjmatrix[1][2] = store[1].weights[1];
adjmatrix[1][4] = store[1].weights[2];
Iпросто не знаю, как я могу сделать это итеративно.Любая помощь будет высоко ценится.