2011-03-27 18 views
2

사실로 표시된 그래프 정점이있는 인접성 매트릭스를 만들어야합니다 : 예.프롤로그의 인접 매트릭스

graph(a,b). 
graph(c,c). 
graph(b,c). 

내가 출력 매트릭스해야합니다 : 내가 각 라인에 대한 목록을 작성해야합니다 알고

0 1 0 
0 0 1 
0 0 1 

을하지만,이 문자가 아닌 숫자 일 때 문제가 발생, 그래서 돈 ' (예를 들어 그래프 (e, f)가있는 경우 목록은 6 개의 숫자 여야 f가 맞을 수 있음). 나는 완전한 대답을 원하지 않는다. 만약 네가해야 할 일에 대한 스케치를하고 싶다면 나는 괜찮을거야.

답변

2

나는 최근에 많은 프롤로그 코드를 작성하지 않은, 그러나 이것은 내가 (테스트하지) 작성합니다 생각 약 :

printedge(X,Y) :- graph(X,Y), write("1 "). 
printedge(X,Y) :- \+ graph(X,Y), write("0 "). 

printmatrix :- 
    List = [a,b,c,d], 
    member(Y, List), 
    nl, 
    member(X, List), 
    printedge(X,Y), 
    fail. 

지금 당신은 어떻게 든 요소의 목록을 얻을 필요가있다.

numnodes(N) :- 
    allnodes(Nodes), 
    length(Nodes, N). 
+0

정말 고마워요, 그것은 내가 기대 그 어느 것보다 더 잘 작동, 난 그냥 갈거야 :

node(X) :- graph(X,_). node(X) :- graph(_,X). allnodes(Nodes) :- setof(X, node(X), Nodes). % removes duplicates 

노드의 수를 효율적으로 활용하려면 다음 작업 – Kirby

4

모든 노드의 목록을 얻으려면 목록을 생성하려면 : D! 고마워 ~!
+0

이것은 내 문제로 끝납니다. xD 첫 번째 반은 끝났습니다. 고마워요! – Kirby

+0

@kirby : 도움이된다면이 대답을 upvote하십시오. –

+0

나는 15 개 이상의 평판이 필요하다. (오늘 등록 만하면된다.) <그러나 나는 충분히 돌아 오면 다시 돌아올 것이다! – Kirby