1 条题解

  • 0
    @ 2024-12-24 10:06:01

    C++ :

    #include <iostream> 
    #include <cstdio>
    #include <cstring>
    #define foru(i, l, r) for (int i = l; i <= r; i ++)
    using namespace std; 
    
    const int N = 510;
    int m, n, e[N][N], a[N];
    bool vst[N];
    
    void dijkstra() {
    	vst[1] = true;
    	
    	foru (i, 2, n) {
    		int t = 0;
    		foru (j, 1, n) {
    			if (!vst[j] && e[1][j] < e[1][t]) t = j;
    		}
    		vst[t] = true;
    		
    		foru (j, 1, n) {
    			if (!vst[j]) e[1][j] = min(e[1][j], e[1][t]+e[t][j]);
    		}
    	}
    }
    
    int main() {
    	scanf("%d%d\n", &m, &n);
     	memset(e, 0x3f, sizeof(e));
     	
     	while (m--) {
     		int num = 0, cnt = 0;
     		char ch;
     		while (scanf("%c", &ch)) {
    			if (ch>='0' && ch<='9') {
    				num = num*10 + ch-'0';
    			}
    			else {
    				a[++cnt] = num;
    				num = 0;
     				if (ch == '\n') break;
    			}
    		}
    		
     		foru (i, 1, cnt) {
     			foru (j, i+1, cnt) {
     				e[a[i]][a[j]] = 1;
    			}
     		}
    	}
    	
    	dijkstra();
    	
    	if (e[1][n] == 0x3f3f3f3f) cout << "NO";
    	else cout << e[1][n] - 1;
    	
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1789
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者