Lista sąsiedztwa z tablicy

0

Mam problem z utworzeniem listy sąsiedztwa wierzchołków z tablicy. w zadaniu mam losowo wygenerowaną tablice 20x40. Przykładowo może być to taka tablica:

char tab[5][5] = {
	{'0','0','1','0','0'},
	{'0','0','1','1','0'},
	{'0','1','1','1','0'},
	{'0','0','1','1','0'},
	{'0','0','0','1','0'} }

wartość '1' ma odpowiadać istnieniu wierzchołka ,a wierzchołek do niego jest sąsiedni jeśli znajduje się w wierszu po jego lewej lub prawej kolumne wyzej albo nizej(góra,dół).

nie moge wykorzystywać stl'a. koncept listy wierzchołków rozumiem, ale ciężko jest mi to przedstawić w języku programowania.

1

Dla każdego elementu tablicy który ma 1 w sobie musisz zrobić listę jego sąsiadów (czyli innych wierzchołków które mają 1).

2

robisz po prostu dwie pętle i w jednej pętli iterujesz po y, w drugiej po x. Tak żeby przeiterować po takim kwadracie (przez 9 pól).
w pseudokodzie

for ny in y - 1 to y + 1: 
  for nx in x - 1 to x + 1: 
     //...

to da ci 9 pól.

  • z tego musisz pominąć pole środkowe (gdzie nx == x oraz ny == y).
  • musisz uważać, żeby nie wyjechać poza obszar tablicy, bo wtedy będzie kuku (no to C++, więc może nie będzie kuku, tylko UB), więc trzeba będzie sprawdzić, czy nx i ny nie wylatują poza indeksy tablic

wartość '1' ma odpowiadać istnieniu wierzcholka ,a wierzchołek do niego jest sąsiedni jeśli znajduje się w wierszu po jego lewej lub prawej ,kolumne wyzej albo nizej(góra,dół).

w zasadzie to, co opisałem, będzie łapać również sąsiadów po skosie, ale wtedy też możesz np. zignorować sytuację w pętli, gdzie masz sąsiadów po skosie.

alternatywnie możesz zrobić sobie funkcję addNeighbor i na pałę wrzucić 4 wywołania nie robiąc już pętli:

addNeighbor(x - 1, y);
addNeighbor(x + 1, y);
addNeighbor(x, y - 1);
addNeighbor(x, y + 1);

tylko ta funkcja by musiała sprawdzać czy nie wylatujesz zasięgiem poza tablicę

no i jeszcze te jedynki i zera potrzebujesz sprawdzić.

0

Czy na pewno 1 to istnienie wierzchołka a nie zaś krawędzi?
To jak to opisano sugeruje że każdy wierzchołek może mieć nie więcej niż 4 sąsiada, oraz nie każdy graf gdzie wierzchołki będą mieć nie więcej niż 4 sąsiada da się zapisać w ten sposób.

0

jak tu jest taki temat, to mam jedno pytanie
Czy grafy wykorzystywane są w sztucznej inteligencji do uczenia się i w efekcie podejmowania decyzji ?

0
zkubinski napisał(a):

jak tu jest taki temat, to mam jedno pytanie
Czy grafy wykorzystywane są w sztucznej inteligencji do uczenia się i w efekcie podejmowania decyzji ?

Znów niestety my (jako forum) daliśmy ci kolejne słówko, które będziesz dowodził, że znasz, bo widziałeś w Pudelku (przekaz tej jakości)
Zapomnij, że je słyszałeś, proszę. Wróć jak NAPRAWDĘ dobry będziesz w temacie wskaźników i list (za następne 17 lat)

1 użytkowników online, w tym zalogowanych: 0, gości: 1