aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/structures des données/td/td7/exo1.c
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-11-21 18:37:48 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2025-11-21 18:37:48 +0100
commit20fc727d4f954eb2109b71a7686c3107fdfa4bbf (patch)
treea5613db97e67d8968c7d622b605ed530755176bb /semestre 3/structures des données/td/td7/exo1.c
parent341fc63ff791e08c7d0a00346080067c9bd1d5dd (diff)
Cours du 3 au 21 novembre
ce qui fait 3 semaines en philo et une semaine en info
Diffstat (limited to 'semestre 3/structures des données/td/td7/exo1.c')
-rw-r--r--semestre 3/structures des données/td/td7/exo1.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/semestre 3/structures des données/td/td7/exo1.c b/semestre 3/structures des données/td/td7/exo1.c
new file mode 100644
index 0000000..ba5d6a4
--- /dev/null
+++ b/semestre 3/structures des données/td/td7/exo1.c
@@ -0,0 +1,90 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct Road{
+ int u, v;
+ double dist;
+} Road;
+
+typedef struct RoadCell{
+ Road* road;
+ struct RoadCell* next;
+} RoadCell;
+
+typedef struct City{
+ int id;
+ int x, y;
+ RoadCell* roads;
+} City;
+
+City** init_cities(int n){
+ City** cities = (City**) malloc(sizeof(City)*n);
+ for (int i = 0; i < n; i++){
+ cities[i] = (City*) malloc(sizeof(City));
+ cities[i]->id = i;
+ cities[i]->x = 0;
+ cities[i]->y = 0;
+ cities[i]->roads = NULL;
+ }
+ return cities;
+}
+
+void update_city(City* city, int x, int y){
+ city->x = x;
+ city->y = x;
+}
+
+void add_route(City* c1, City* c2, double dist){
+ Road* road = (Road*) malloc(sizeof(Road));
+ road->u = c1->id;
+ road->v = c2->id;
+ road->dist = dist;
+
+ RoadCell* road_1 = (RoadCell*) malloc(sizeof(RoadCell));
+ road_1->road = road;
+ road_1->next = c1->roads;
+ c1->roads = road_1;
+
+ RoadCell* road_2 = (RoadCell*) malloc(sizeof(RoadCell));
+ road_2->road = road;
+ road_2->next = c2->roads;
+ c2->roads = road_2;
+}
+
+void print(City** cities, int n){
+ printf("Cities len: %d\n", n);
+ for (int i = 0; i < n; i++){
+ printf("city %d: {x: %d, y: %d}, roads [", i, cities[i]->x, cities[i]->y);
+ RoadCell* roads = cities[i]->roads;
+ while (roads){
+ Road* road = roads->road;
+ printf("{from: %d, to: %d, dist: %f},", road->u, road->v, road->dist);
+ roads = roads->next;
+ }
+ printf("]\n");
+ }
+}
+
+void free_cities(City** cities, int n){
+ for (int i = 0; i < n; i++) {
+ City* city = cities[i];
+ while (city->roads){
+ //TODO: free(city->roads->road)
+ RoadCell* old = city->roads;
+ city->roads = city->roads->next;
+ free(old);
+ }
+ free(city);
+ }
+ free(cities);
+}
+
+int main(){
+ City** cities = init_cities(4);
+ add_route(cities[0], cities[1], 3);
+ add_route(cities[1], cities[2], 4);
+ add_route(cities[0], cities[2], 8);
+ add_route(cities[3], cities[1], 4.5);
+ print(cities, 4);
+ return 0;
+}