之前图相关的都用的领接数组,这换成了领接矩阵,半天没反应过来,我去。。。。。
#include<iostream>
#include<algorithm>
#include<fstream>
#include<map>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
void dfs(vector<vector<int>> &path, int s, int e, int v,int &res,int L,int M) {
    if (L > M)
        return;
    if(L==M&&s==e){
        res = min(res, v);
        return;
    }
    for (int i = 0; i < path[0].size(); ++i) {
        if (path[s][i] != 0)
            dfs(path, i, e, v + path[s][i], res, L + 1, M);
    }
}

vector<vector<int>> solve(vector<vector<int>> &path,int M) {
    vector<vector<int>> res(path.size(), vector<int>(path[0].size(), -1));
    for(int i=0;i<path.size();++i)
        for (int j = 0; j < path[0].size(); ++j) {
            int r=INT32_MAX;
            dfs(path,i,j,0,r,0,M);
            res[i][j] = r;
        }
    return res;
}
int main(void){
    int N, M;
    while (cin >> N >> M) {
        int N1, N2;
        cin >> N1 >> N2;
        vector<vector<int>> path;
        for (int i = 0; i < N1; ++i) {
            vector<int> temp;
            int data;
            for (int j = 0; j < N2; ++j) {
                cin >> data;
                temp.push_back(data);
            }
            path.push_back(temp);
        }
        vector<vector<int>> res = solve(path, M);
        for (auto v : res) {
            for (auto i : v)
                cout << i << " ";
            cout << endl;
        }
    }
    getchar();
    return 0;
}