starò sbagliando sicurmente, ma non so cosa fare proprio…
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <limits>
#include <cstdio>
#include <cstring>
#include <utility>
#define MAXN 1024
#define MAXK 100
using namespace std;
typedef pair<int,int> pii;
vector<pii>G[MAXN];
int mat[MAXN][MAXK];
int K,N,M;
void dijkstra(int start,int numero_visitati,int k) {
int u, v, i, c, w;
priority_queue< pii, vector< pii >, greater< pii > > Q;
memset(mat, 0x3f, sizeof mat);
Q.push(pii(0, start));
mat[start][numero_visitati] = 0;
while(!Q.empty()) {
u = Q.top().second;
c = Q.top().first;
Q.pop();
if(mat[u][numero_visitati] < c) continue;
if(numero_visitati >=k-1) return;
for(i = 0; i < G[u].size(); i++) {
v = G[u][i].first; // nodo
w = G[u][i].second; // peso edge
if(mat[v][numero_visitati] > mat[u][numero_visitati] + w) {
mat[v][numero_visitati] = mat[u][numero_visitati] + w;
Q.push(pii(mat[v][numero_visitati], v));
}
}
numero_visitati++;
}
}
int main()
{
ifstream in("input.txt");
ofstream out("output.txt");
in>>K>>N>>M;
for(int i = 0;i<M;i++)
{
int da,a,peso;
in>>da>>a>>peso;
G[da].push_back(pii(a,peso));
}
dijkstra(0,0,K);
for(int i = 0;i<N;i++)
{
for(int j = 0;j<K;j++)
{
cout<<mat[i][j]<<endl;
}
}
return 0;
}