1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
{
"cells": [
{
"cell_type": "code",
"execution_count": 13,
"id": "b202def1",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:33:25.297982Z",
"start_time": "2023-01-02T08:33:23.299282Z"
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Looking in indexes: http://mirrors.aliyun.com/pypi/simple/\r\n",
"Requirement already satisfied: star in /Users/chunhuizhang/anaconda3/envs/py3.7/lib/python3.7/site-packages (0.1.2)\r\n"
]
}
],
"source": [
"!pip install star"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "d893d0dd",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:33:26.443150Z",
"start_time": "2023-01-02T08:33:26.436771Z"
}
},
"outputs": [],
"source": [
"nodes = {'A': [('B', 100), ('C', 20)],\n",
" 'C': [('D', 20)],\n",
" 'D': [('B', 20)]}"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "56a946aa",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:33:27.282504Z",
"start_time": "2023-01-02T08:33:27.278446Z"
}
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import networkx as nx\n",
"import astar"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "8f380cd5",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:33:35.963179Z",
"start_time": "2023-01-02T08:33:35.758451Z"
}
},
"outputs": [
{
"data": {
"image/png": "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XLlypmMBiAMUSiQZkZGROnHiRIzbF166dEmSlC9fvug7z1SpUkWFCxf+17vPnDp1SkWLFlXZsmVls9l06NAhPXnyRO+++67GjRv3l8cCAfhnTqdTmzZtUt++ffXzzz+rdevWGjVqVPR5rgBcE4USLuvJkyfat29fdHncvXu3Hjx4IC8vL5UuXTrG3WeyZMny3M//22+/qUCBAnrttddUunRpNWrU6E93wAHwYiIjIzV//nwNHjxYd+7cUY8ePfTxxx8rTZo0pqMBeAEUSriMGzduxFh9PHTokCIiIpQqVSpVqlQpukCWL19evr6+puMCeAahoaGaNGmSxo8fL6vVqiFDhqhz585KliyZ6WgAngOFEomS0+nU6dOnY1z/eO7cOUlSzpw5Y4yvixcvziYYwMX9/vvvGjp0qL766ivlyZNHY8eOVYsWLbgWGXARFEokCg6HQwcOHIguj7t27dKdO3fk4eEhPz+/GAUyR44cpuMCiCcnTpxQv379tH79elWqVEmTJk1SpUqVTMcC8C8olDDizp072rVrV3SBPHDggBwOh5InT66KFStGl8eKFStG37UGgPsIDg5Wnz59dOTIEb366qsaM2aM8ufPbzoWgL9BoUS8czqdunDhQozx9cmTJyVJL730UozVx5IlS8rb29twYgCJQVRUlBYtWqSBAwfqxo0b+uCDDzR48GClT5/edDQA/4NCiTgXHh6uI0eOxCiQN27ckCQVK1YsRoHMkycP10gB+EdhYWGaOnWqxowZIw8PDw0cOFDdunWLvuUpAPMolIi1Bw8eaPfu3dHlcd++fXry5ImsVqvKly8fXR4rVaqkdOnSmY4LwEXdvHlTw4cP16xZs5Q9e3aNHj1ar7/++r+eKQsg/lEo8dx+++23GKuPx48fl9PpVIYMGWKsPvr7+3NPawBx7vTp0+rfv79WrVqlsmXLauLEiapevbrpWIBbo1DiH0VGRur48eMxCuSVK1ckSQULFoxRIAsWLMj4GkCCCQkJUZ8+fbR//341adJE48aNU+HChU3HAtwShRIxPH78WHv37o0+QHz37t169OiRvL29VaZMmejyWLlyZWXKlMl0XABuLioqSt99950GDBigy5cvq2PHjho6dCjvT0ACo1C6uWvXrsW4+8yRI0cUGRmpNGnSqHLlytEFsly5cvLx8TEdFwD+ksPh0PTp0zVy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o4HdumnixIkqUKCA6Tgug4vbEK9atmypZcuWafXq1Xr11VflcDhMRwIA4E/u3Lmjvn37Km/evFq9erW2b99uOpJLYeSNBLFx40a98sorql69ulasWKHkyZObjgQAgB4/fqypU6dq7NixCgsLU1RUlCTp/Pnzyps3r+F0roNCiQSzdetWvfzyyypfvrzWrFmjFClSmI4EAHBju3bt0ssvv6z79+9HF0lJSpYsmZ48ecKG0ufAyBsJplatWtq0aZMOHjyoevXq6cGDB6YjAQDcWEREhJ48efKnM5Pz589PmXxOFEokqKpVqyooKEi//PKL6tSpo7t375qOBABwUwEBATp8+LCyZs0a/TFPT0+VKFHCYCrXRKFEgitfvry2bt2qCxcuqFatWrp165bpSAAAN2W1WnX//n0VLlxYkhQZGakiRYoYTuV6KJQwonTp0tq+fbuuX7+uGjVq6Pr166YjAQDcTEREhNq0aaP06dNrz5492rx5s4oXL666deuajuZy2JQDo06fPq3AwED5+voqODhY2bNnNx0JAOAmhg0bppEjRyokJESVK1c2HcelsUIJowoVKqSQkBA5HA4FBATo119/NR0JAOAGdu7cqREjRmjIkCGUyTjACiUShd9++021atXS06dPFRwczN0JAADx5v79+ypVqpSyZ8+u7du3c2vgOMAKJRKFnDlzKiQkRL6+vqpevbp++eUX05EAAEmQ0+lU586ddf/+fS1evJgyGUcolEg0smbNqh07dihDhgyqUaOGjh49ajoSACCJ+frrr/XNN99o1qxZypUrl+k4SQYjbyQ6d+7cUd26dXXx4kVt3rxZZcuWNR0JAJAEnD9/XqVKlVKLFi00f/5803GSFAolEqX79++rQYMG+uWXX7Rx40ZVqlTJdCQAgAsLDw9X1apVdefOHR0+fFgpU6Y0HSlJYeSNRClNmjTavHmzSpUqpTp16mjHjh2mIwEAXNgnn3yigwcPavHixZTJeEChRKKVMmVKbdiwQZUqVVKDBg20efNm05EAAC5ox44dGj16tIYPH64KFSqYjpMkMfJGome329WiRQsFBQVp+fLlaty4selIAAAXce/ePfn5+SlfvnwKDg6Wp6en6UhJEiuUSPRsNptWrlypRo0aqXnz5lqxYoXpSAAAF+B0OtWhQwc9fvxYX3/9NWUyHlEo4RKSJUumb7/9Vi1atNBrr72mJUuWmI4EAEjk5s2bp2XLlmnOnDnKkSOH6ThJGqd5wmV4e3tr0aJFslqtatOmjRwOh9577z3TsQAAidCZM2fUrVs3tWvXTq+++qrpOEkehRIuxdPTU3PnzpXNZlPbtm3lcDjUqVMn07EAAInI06dP1bp1a2XLlk1Tp041HcctUCjhcjw8PDRz5kzZbDZ17txZdrtdH374oelYAIBEYvDgwTp27Jh2796tFClSmI7jFiiUcEkWi0VTpkyRzWZTz549FRYWpgEDBpiOBQAwLDg4WBMmTNDYsWNVpkwZ03HcBoUSLstisWjMmDHy8fHRxx9/LLvdrmHDhslisZiOBgAw4M6dO3r77bdVs2ZN9enTx3Qct0KhhEuzWCwaOnSobDabPvroI9ntdo0dO5ZSCQBuxul0qn379rLb7Vq4cKE8PDjIJiFRKJEk9O/fXzabTR9++KHsdrumTp1KqQQAN/LFF1/ohx9+0MqVK5UtWzbTcdwOhRJJRo8ePWS1WqM36sycOZPfUAHADZw8eVI9e/ZUx44d1axZM9Nx3BK3XkSSM3/+fLVr105vvfWWvvrqK+6MAABJmMPhUIUKFeRwOHTw4EElT57cdCS3xAolkpx3331XVqtVb731lux2u77++mt5e3ubjgUAiAcff/yxTp48qb1791ImDaJQIkl64403ZLVa9frrr8vhcOibb76R1Wo1HQsAEIc2b96syZMna/LkySpVqpTpOG6NkTeStHXr1qlFixYKDAzU8uXLZbPZTEcCAMSBmzdvys/PTyVLltSGDRu4Zt4wCiWSvC1btqhp06aqXLmyVq1aJV9fX9ORAACx4HQ61aRJE+3du1fHjh1TlixZTEdye9R5JHl16tTRhg0btHfvXjVo0ECPHj0yHQkAEAszZszQ2rVrNXfuXMpkIsEKJdzG7t27Vb9+fRUtWlQbNmxQmjRpTEcCADynn3/+WWXLltX777+vzz77zHQc/B8KJdzKwYMHVadOHeXJk0ebN29W+vTpTUcCADyjsLAwlS9fXpK0b98++fj4GE6E/2DkDbdSpkwZbd++XZcvX1aNGjV048YN05EAAM+of//+Onv2rJYsWUKZTGQolHA7fn5+2rFjh+7cuaPq1avr6tWrpiMBAP7FunXr9Nlnn2nChAkqUaKE6Tj4H4y84bbOnTunWrVqKVmyZAoODlauXLlMRwIA/IXr16/Lz89P5cqV09q1a2WxWExHwv9ghRJuK3/+/AoJCVFUVJQCAgJ0/vx505EAAP8jKipK7733njw8PDRv3jzKZCJFoYRby507t0JCQmSz2RQQEKDTp0+bjgQA+C/Tpk3Txo0bNX/+fGXKlMl0HPwNRt6A/hin1K5dW7dv31ZQUJCKFy9uOhIAuL2jR4+qfPny+uCDDzRlyhTTcfAPKJTA/7l9+7bq1Kmjy5cva/PmzfL39zcdCQDc1pMnT1S2bFklS5ZMe/fuldVqNR0J/4CRN/B/MmTIoK1btypv3rwKDAzU3r17TUcCALfVp08fXbx4UUuWLKFMugAKJfBf0qZNq6CgIBUrVkx16tTRTz/9ZDoSALid1atXa+bMmZoyZYqKFi1qOg6eASNv4C88fvxYTZo00d69e7V69WoFBgaajgQAbuHatWvy8/NT1apVtXLlSnZ1uwgKJfA3wsLC9Morr2j79u1auXKlGjRoYDoSACRpUVFRqlevnk6cOKFjx44pQ4YMpiPhGTHyBv6Gj4+PVq1apXr16qlp06ZatWqV6UgAkKRNnjxZQUFBWrhwIWXSxbBCCfyL8PBwvfnmm1q5cqUWL16s1157zXQkAEhyDh06pIoVK+rDDz/U+PHjTcfBc6JQAs8gIiJC7733npYsWaJ58+bp7bffNh0JAJKM0NBQ+fv7K0WKFNq9e7eSJUtmOhKek5fpAIAr8PLy0vz582Wz2fTuu+/K4XDo/fffNx0LAJKEnj176sqVKzp06BBl0kVRKIFn5OnpqdmzZ8tqtapDhw5yOBzq2rWr6VgA4NKWL1+uOXPmaM6cOSpUqJDpOHhBFErgOXh4eOizzz6TzWZTt27dFBYWpr59+5qOBQAu6cqVK3r//ffVokULtWvXznQcxAKFEnhOFotFEyZMkI+Pj/r16ye73a7BgwebjgUALiUyMlJvvfWWfH199cUXX3DepIujUAIvwGKxaMSIEbLZbBo0aJDsdrtGjhzJGyIAPKMJEyZox44d2rp1q9KlS2c6DmKJQgnEwsCBA2Wz2dSnTx+FhYVp0qRJlEoA+Bf79+/X4MGD9dFHH6lGjRqm4yAOcGwQEAc+//xzde3aVZ07d9b06dPl4cE9AwDgrzx69Ej+/v5Kmzatdu7cKW9vb9OREAdYoQTiQJcuXWSz2fT+++/L4XDoiy++kKenp+lYAJDodO/eXb///rs2bNhAmUxCKJRAHGnXrp2sVqveeecd2e12LViwQF5e/BMDgP/49ttvNX/+fM2bN0/58+c3HQdxiJE3EMe+//57tW7dWk2bNtWSJUs4pBcAJF26dEklS5ZU/fr1tXTpUq43T2IolEA8WL16tVq2bKm6devq+++/l81mMx0JAIyJjIxUjRo19Ntvv+no0aNKkyaN6UiIY+wcAOJBkyZNtGrVKgUFBalp06Z68uSJ6UgAYMzo0aO1a9cuLVq0iDKZRLFCCcSjrVu36uWXX1b58uW1Zs0apUiRwnQkAEhQu3fvVrVq1fTxxx9r+PDhpuMgnlAogXi2c+dONWjQQCVKlND69euVOnVq05EAIEE8fPhQpUqVUpYsWRQSEsJGxSSMkTcQz6pUqaKgoCD98ssvql27tu7evWs6EgAkiC5duuj27dtavHgxZTKJo1ACCaB8+fLatm2bLl68qFq1aunWrVumIwFAvFq8eLEWLVqkmTNnKk+ePKbjIJ4x8gYS0IkTJxQYGKh06dIpODhYL730kulIABDnLly4oFKlSqlJkyZatGiR6ThIABRKIIGdOXNGtWrVko+Pjw4ePKhUqVKZjgQAcSYiIkIBAQG6fv26Dh8+zHXjboILGoAEVrBgQYWEhGjt2rWUSQBJzogRI7Rv3z79+OOPlEk3wgolkMjdvn1bXl5enN0GINH78ccfVaNGDQ0bNkyDBw82HQcJiEIJJGK3bt3SzJkzdejQIX3yyScqWbKk6UgA8Jfu37+vkiVLKmfOnNq+fbs8PT1NR0ICYpc3kIhlzJhR/v7+ypYtm8qUKaOjR4+ajgQAf+J0OtWpUyc9ePBAixYtoky6IQolkEhFRERIkho3bixPT09FRUXpxIkTioqKMpwMAGJauHChvv32W82ePVu5cuUyHQcGMPIGEqGoqCh5ePzx+96wYcM0atQozZ49W6+99hq3bwSQqJw7d06lSpVSy5YtNW/ePNNxYAiFEkhknE6nLBaLJGn06NEaPHiwPvvsM7377rtKnjy5pJiFEwBMCQ8PV5UqVXT37l0dPnxYKVOmNB0JhnBsEJBIREREyOl0ytvbW5I0efJkDRo0SJMnT9Zbb70VXSYl6d69e/L09JTdbleWLFlMRQbg5oYOHarDhw9r586dlEk3xxIHkAg4nU599dVX6t69uyRpxowZ6tOnj8aOHau2bdvGeKOeNm2amjZtqpIlS+rll1/W3LlzTcUG4Ma2b9+usWPHavjw4SpfvrzpODCMkTeQSJw8eVLFihWL3s09dOhQde3aNfpg4Lt372rQoEH68ssvNWDAAOXKlUsWi0Vdu3bVggUL9Oqrrxr+DgC4i7t378rPz08FChRQUFAQu7pBoQQSk4sXL6pmzZry8PDQjh07lCNHDklSZGSkunXrpvnz52vZsmVq2LBh9Ne0adNGmTJl0uTJk03FBuBGnE6nXn31VW3btk3Hjh1T9uzZTUdCIsDIG0hE8uTJo507d+r+/fvq37+/njx5Ikn6/PPPNWfOnOgyGRkZGf01oaGhOnfunPjdEEBC+Oqrr7RixQrNmTOHMoloFEogkcmWLZtOnjwpm82m69ev69dff9XEiRM1cuRINWzYUFFRUdHjpW3btmnbtm1q2bJl9M5wSZRLAPHi9OnT6tGjh9q3b68WLVqYjoNEhJE3kEhFRkbK09NThw8fVr169bRixQpVrVo1+lihI0eOaPDgwfL09NTkyZOVN29eSX+sWEZGRipVqlSGvwMAScnTp09VqVIlPX78WIcOHZKvr6/pSEhEWKEEEqn/rEI+ffpUGTJkiB4tWSwWHThwQCNGjNDdu3fVsWNH5c2bV6dPn9Yrr7yiypUrq379+hoyZIjJ+ACSmEGDBun48eNaunQpZRJ/wjmUQCJXtmxZpU6dWu3bt1f79u119+7d6BXJvn37qkGDBlq4cKGGDx+uVKlSqUOHDvL29tbQoUMVHh6uMWPGmP4WALi4oKAgTZgwQRMmTJC/v7/pOEiEGHkDLiAqKkrNmjXTrVu3dP78eb3zzjtq1aqVypYtq0WLFmns2LEqXry4vvnmm+ivWbhwoaZPn67NmzcrTZo05sIDcGm3b9+Wn5+fihUrpk2bNnGXLvwlVigBF+Dh4aHVq1fryZMnCgsLU/r06SVJZ86c0ZgxY1SkSBEtWbJEkmS322Wz2RQWFqbHjx+bjA3AxTmdTrVv315Pnz7VggULKJP4WxRKwIUkT55cPj4+0X8eMWKEIiIi9O2338rDw0NPnz6VzWaTJC1fvlyZM2dmdRLAC5s9e7ZWrVqlVatWKWvWrKbjIBGjUAIuxmKxKCoqSg8fPtShQ4fUs2fP6Pt6/6dM9u3bV/v27VNQUJAkRe8MB4Bn9csvv6hXr17q3LmzmjRpYjoOEjnWrgEX5OHhIR8fH6VLly76zMn/lMlBgwZp0aJF+uSTT1S0aFFJokwCeC4Oh0OtW7dW7ty5NXHiRNNx4AJYoQRclNVqlb+/vyZNmqT8+fPrwYMHWrlypX744QeNGDFCrVu3VvLkyU3HBOCCBgwYoJMnT2rfvn28j+CZsMsbcHEdOnTQzp07ZbfblTJlSk2dOlXlypXjnDgAL2Tjxo1q0KCBpkyZog8//NB0HLgICiWQBFy6dEk+Pj5KkSIFqwkAXtjNmzfl5+en0qVLa926dezqxjOjUAJJwH9vuomKivrTDwGHwyGr1WoiGgAX4XQ61bhxY+3fv1/Hjx9X5syZTUeCC+FXDyAJ+O9NN/9bJqdMmaKAgADdu3cvoWMBcCGff/651q9fr3nz5lEm8dwolEASFxAQoHPnzikwMFC3b982HQdAInT8+HH16dNH3bp1U6NGjUzHgQti5A24gWPHjql27drKnDmzgoKCWH0AEC0sLEzly5eXJO3fvz/6CDLgebBCCbgBPz8/7dixQ3fu3FH16tV19epV05EAJBL9+vXT2bNntXTpUsokXhiFEnATRYoUUUhIiJ48eaKAgABdunTJdCQAhq1bt07Tp0/XxIkTVbx4cdNx4MIYeQNu5tdff1VgYKAiIiIUHBys/Pnzm44EwIDr16+rRIkSqlChgtasWcMdtRArFErADV29elW1atXS48ePFRwcrMKFC5uOBCABRUVFqUGDBjp69KiOHTumTJkymY4EF8fIG3BD2bJl044dO5Q2bVpVr15dx48fNx0JQAL69NNPtXnzZi1YsIAyiTjBCiXgxm7fvq06derot99+05YtW+Tv7286EoB4duTIEVWoUEFdunTR5MmTTcdBEkGhBNzcvXv3VL9+fZ0+fVqbNm1ShQoVTEcCEE+ePHmiMmXKyGq1au/evdxBC3GGkTfg5tKmTastW7aoePHiql27tn788UfTkQDEk969e+vSpUtaunQpZRJxikIJQKlSpdLGjRtVrlw51a9fX8HBwaYjAYhje/bs0axZszRlyhQVKVLEdBwkMYy8AUQLCwtT8+bNtW3bNq1YsUINGzY0HQlAHHA6nbJYLNqwYYPq16/PEUGIcxRKADE4HA699tpr2rBhg7777js1a9bMdCQAceQ/xRKIa4y8AcRgtVq1bNkyNWvWTK+++qq+/fZb05EAxBHKJOILhRLAn3h7e2vJkiVq3bq1WrdurYULF5qOBOBfMHCESV6mAwBInLy8vDRv3jxZrVa9++67stvt6tChg+lYAP4Gq48wiUIJ4G95enpq9uzZslqt6tixoxwOh7p162Y6FoD/EhoaqrVr12rPnj3KkiWL6tevr9y5cyt16tSmo8GNUCgB/CMPDw999tln8vHxUffu3RUWFqZ+/fqZjgXg/zRr1kzXrl1TxowZdebMGX311Vdq0qSJWrVqpXLlypmOBzdBoQTwrywWi8aPHy8fHx/1799fdrtdgwcPZsQGGDZ37lydOXNGBw4cUIYMGWSxWDRq1Ch9//33OnfunLp166bAwEB2dyPeUSgBPBOLxaLhw4fLarVq0KBBstvtGjVqFD+kAIOuXLmi/PnzK23atNEfGzhwoKpVq6bevXtr8ODBKlmypDJkyGAwJdwBu7wBPJeBAwdq0qRJGjNmjHr16sXOUsCgAgUK6OLFi7px44YsFoscDoecTqcCAgK0adMm3bp1S3369JHELnDEL1YoATy3Xr16yWazqUuXLnI4HJo+fbo8PPj9FEhoAQEBslgsev3117Vx40b5+voqMjJSUVFRSpcunV5//XUdPHhQErvAEb/4CQDghXzwwQf68ssvNWvWLLVv316RkZGmIwFuJ1u2bNqwYYMePnyoggULKigoSJ6envL29pYk+fr66u7du3I4HIaTIqljhRLAC2vXrp2sVqveeecdORwOLViwQF5evK0A8cVut+vs2bPatWuXqlevrnz58qlAgQKaO3eupkyZovr166t58+aqWbOmrl+/rk8//VQzZ86U1Wo1HR1JHPfyBhBry5Yt0xtvvKGmTZtqyZIlSpYsmelIQJLUunVr/fzzz7py5YrCwsI0depUdezYUZJ069Yt7dmzR2PHjtWjR4+ULVs21a1bVz179jScGu6AQgkgTqxZs0avvvqq6tatq++//142m810JCBJGT58uJYsWaKvv/5a/v7+mjFjhgYNGqRt27bJ398/xmOvX7+uLFmyGEoKd8Q1lADixMsvv6zVq1crKChITZo00ZMnT0xHApKMCxcuaMmSJRo3bpzKlSsnDw8Pvfvuu8qdO7d++eUXSTF3cVMmkdAolADiTL169bR+/Xrt2rVLDRs21OPHj01HApKE3377TWnTplXh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6JG2bt2qwoULm46EJOj333+Xn5+fKlWqpFWrVnFEENwGhRKA27h+/bpq166tW7duKSgoSCVKlDAdCUlIVFSUGjRooGPHjunYsWPKmDGj6UhAgmHkDcBtZMmSRdu3b1fWrFlVo0YNHTp0yHQkJCFTp07V5s2btXDhQsok3A4rlADczr1791S/fn2dPn1aGzduVMWKFU1Hgos7fPiwKlSooO7du2vixImm4wAJjkIJwC09fPhQjRo10pEjR7Ru3ToFBASYjgQX9eTJE5UpU0Y2m0179uyR1Wo1HQlIcIy8AbilVKlSaePGjSpfvrzq16+voKAg05Hgonr16qVLly5p6dKllEm4LQolALfl6+urtWvXqnr16mrcuLHWr19vOhJczMqVKzV79mxNnTqVkwPg1hh5A3B7DodDrVq10vr16/Xtt9/qlVdeMR0JLuDq1avy8/NT9erVtXz5co4IglujUAKApPDwcLVp00bLly/X4sWL1apVK9ORkIhFRUWpTp06On36tI4ePar06dObjgQY5WU6AAAkBt7e3lq8eLGsVqtat24tu92ud955x3QsJFITJ07Utm3bFBQURJkERKEEgGheXl6aP3++rFar3n33XTkcDnXo0MF0LCQyBw4c0MCBA9WvXz/VqlXLdBwgUWDkDQD/IyoqSj169ND06dP16aefqnv37qYjIZF4/Pix/P39lSpVKu3atUvJkiUzHQlIFFihBID/4eHhoWnTpslms6lHjx6y2+3q16+f6VhIBHr06KFr165p7dq1lEngv1AoAeAvWCwWjR8/Xj4+Purfv7/sdrsGDx7MTl439v3332vu3Ln66quvVLBgQdNxgESFQgkAf8NisWj48OGy2WwaOHCg7Ha7Ro0aRal0Q7/99ps6dOigli1b6r333jMdB0h0KJQA8C8+/vhj2Ww29e7dW2FhYZo8eTKl0o1ERkbqrbfeUsqUKTV79mz+fw/8BQolADyDXr16yWazqUuXLrLb7fr888/l4cHNxtzB2LFj9eOPP2r79u1Kmzat6ThAokShBIBn9MEHH8hms6l9+/ZyOByaM2eOPD09TcdCPNq7d6+GDh2qjz/+WAEBAabjAIkWxwYBwHNavHix3n77bb3++utasGCBvLz43TwpevjwoUqXLq2MGTPqxx9/lLe3t+lIQKLFuyAAPKc333xTVqtVb7zxhux2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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def show_wgraph(G):\n",
" plt.figure() \n",
" pos = nx.spring_layout(G)\n",
" weight_labels = nx.get_edge_attributes(G,'weight')\n",
" nx.draw(G,pos,font_color = 'white', node_shape = 's', with_labels = True,)\n",
" output = nx.draw_networkx_edge_labels(G,pos,edge_labels=weight_labels)\n",
"\n",
"G = nx.DiGraph()\n",
"\n",
"G.add_node('A')\n",
"G.add_node('B')\n",
"G.add_node('C')\n",
"G.add_node('D')\n",
"\n",
"G.add_edge('A', 'B', weight=100)\n",
"G.add_edge('A', 'C', weight=20)\n",
"G.add_edge('C', 'D', weight=20)\n",
"G.add_edge('D', 'B', weight=20)\n",
"\n",
"show_wgraph(G)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "c7dc39cb",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:35:24.961903Z",
"start_time": "2023-01-02T08:35:24.957238Z"
}
},
"outputs": [],
"source": [
"class GraphAStar(astar.AStar):\n",
" def __init__(self, nodes):\n",
" self.nodes = nodes\n",
"\n",
" def neighbors(self, node):\n",
" for n, d in self.nodes[node]:\n",
" yield n\n",
"\n",
" # g function\n",
" def distance_between(self, n1, n2):\n",
" for n, d in self.nodes[n1]:\n",
" if n == n2:\n",
" return d\n",
"\n",
" # h function\n",
" def heuristic_cost_estimate(self, current, goal):\n",
" return 1\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "499b3d96",
"metadata": {
"ExecuteTime": {
"end_time": "2023-01-02T08:35:34.501996Z",
"start_time": "2023-01-02T08:35:34.498035Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['A', 'C', 'D', 'B']\n",
"['A', 'C']\n"
]
}
],
"source": [
"graph_solver = GraphAStar(nodes)\n",
"print(list(graph_solver.astar('A', 'B')))\n",
"print(list(graph_solver.astar('A', 'C')))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4b966b35",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|