有向图中N*N矩阵 cost:M, 最多可以遍历的结点个数 例如A可以有0->1->2->0->1 代价:2+2+3+2=9<10 输出4
#include <iostream> using namespace std; int main(){ int N=3;int M=10; int A[][3]={{0,2,3},{4,0,2},{3,4,0}}; int last_step[3]; int dist[3][3]; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { dist[i][j]=A[j][i]; } } for(int i=0;i<N;i++){last_step[i]=i;} int Max=0; for(int step=1;step-Max<=1;step++){ for(int j=0;j<N;j++){ int min=INT_MAX;int u; for(int m=0;m<N;m++) { if(last_step[j]!=m&&dist[m][j]<min) { min=dist[m][j]; u=m; } } last_step[j]=u; for(int k=0;k<N;k++) { dist[k][j]=min+A[k][u]; if(dist[k][j]<=M) {Max=step;} } } } cout<<Max<<endl; return 0; }