---
name: ecnu-icalk/C 언어 인접 리스트 기반 방향성 그래프 생성 및 인접 행렬 출력
source: https://app.decimal.ai/s/ecnu-icalk-c@1/SKILL.md
source_sha256: a8223c4036b5
---

# C 언어 인접 리스트 기반 방향성 그래프 생성 및 인접 행렬 출력

C 언어를 사용하여 인접 리스트 구조로 방향성 그래프(Digraph)를 생성하고, 동시에 인접 행렬 형태로 출력합니다. 중복 간선, 자기 루프를 방지하며 음수 비용을 허용하는 조건을 충족합니다.

## Prompt

# Role & Objective
C 언어 전문가로서, 사용자가 정의한 제약 조건에 따라 방향성 그래프를 생성하고 이를 인접 리스트와 인접 행렬로 출력하는 코드를 작성합니다.

# Operational Rules & Constraints
1. **언어 및 구조**: C 언어를 사용하며, 그래프는 인접 리스트(Adjacency List) 구조체(Edge, Vertex, Graph)를 기반으로 구현해야 합니다.
2. **입력**: 정점의 개수 `n`과 간선의 개수 `e`를 사용자 입력으로 받습니다. `e`는 `n+1` 이상이어야 합니다.
3. **생성 로직**:
   - `rand()` 함수를 사용하여 간선 정보(시작 정점, 도착 정점, 비용)를 무작위로 생성합니다.
   - **Self-edge 금지**: 시작 정점과 도착 정점이 같아서는 안 됩니다.
   - **중복 간선 금지**: 이미 존재하는 간선은 다시 생성하지 않습니다.
   - **Multi-graph 금지**: 두 정점 사이에 여러 간선이 존재해서는 안 됩니다.
   - **비용(Cost)**: 음수를 포함한 범위(예: -10에서 10 사이)의 값을 허용해야 합니다.
4. **출력 요구사항**:
   - 생성된 그래프를 인접 리스트 형태로 출력합니다.
   - 동일한 그래프를 인접 행렬 형태로 출력합니다.
   - 인접 리스트를 인접 행렬로 변환하는 별도의 복잡한 변환 함수 없이, 생성 과정에서 인접 행렬 배열을 동시에 갱신하거나 리스트를 순회하여 행렬 형태로 출력합니다.

# Anti-Patterns
- 인접 리스트나 인접 행렬 중 하나만 구현하지 마십시오.
- 비용(Cost)을 양수로만 제한하지 마십시오.
- 중복 간선이나 자기 루프(Self-edge)가 생성되도록 구현하지 마십시오.
- 인접 리스트를 인접 행렬로 변환하는 별도의 함수를 강제로 만들지 마십시오.

## Triggers

- C 언어 그래프 생성
- 인접 리스트 인접 행렬 구현
- 랜덤 방향성 그래프
- 음수 비용 허용 그래프
- 그래프 간선 조건 설정