#include <stdio.h>#include <iostream>#include <string>#include <string.h>#include <stdlib.h>using namespace std;#define INF 10000000int start;int over;bool sign[9];int NUM;int path[9][9];int road[9];void input(){path[0][0] = INF; path[0][1] = INF; path[0][2] = 10; path[0][3] = INF; path[0][4] = 30; path[0][5] = 100; path[0][6] = INF; path[0][7] = INF; path[0][8] = INF;path[1][0] = INF; path[1][1] = INF; path[1][2] = 5; path[1][3] = INF; path[1][4] = INF; path[1][5] = INF; path[1][6] = INF; path[1][7] = INF; path[1][8] = INF;path[2][0] = INF; path[2][1] = INF; path[2][2] = INF; path[2][3] = 50; path[2][4] = INF; path[2][5] = INF; path[2][6] = INF; path[2][7] = INF; path[2][8] = INF;path[3][0] = INF; path[3][1] = INF; path[3][2] = INF; path[3][3] = INF; path[3][4] = INF; path[3][5] = 10; path[3][6] = INF; path[3][7] = INF; path[3][8] = INF;path[4][0] = INF; path[4][1] = INF; path[4][2] = INF; path[4][3] = 20; path[4][4] = INF; path[4][5] = 60; path[4][6] = INF; path[4][7] = INF; path[4][8] = INF;path[5][0] = INF; path[5][1] = INF; path[5][2] = INF; path[5][3] = INF; path[5][4] = INF; path[5][5] = INF; path[5][6] = INF; path[5][7] = INF; path[5][8] = INF;path[6][0] = INF; path[6][1] = INF; path[6][2] = INF; path[6][3] = INF; path[6][4] = INF; path[6][5] = INF; path[6][6] = INF; path[6][7] = INF; path[6][8] = INF;path[7][0] = INF; path[7][1] = INF; path[7][2] = INF; path[7][3] = INF; path[7][4] = INF; path[7][5] = INF; path[7][6] = INF; path[7][7] = INF; path[7][8] = INF;path[8][0] = INF; path[8][1] = INF; path[8][2] = INF; path[8][3] = INF; path[8][4] = INF; path[8][5] = INF; path[8][6] = INF; path[8][7] = INF; path[8][8] = INF;}void init(){memset(road, 0, sizeof(road));NUM = 9;for(int i=0; i<NUM; i++)sign[i] =false;input();}void findRoad(int road[], int length){for(int i=0; i<length; i++)cout << " " << road[i];cout << over << endl;}void dfs(int tp, int road[], int length){sign[tp] = true;for(int i=0; i<NUM; i++){if(path[tp][i] != INF && sign[i] != true){if(tp == over){//road[length++] = over;findRoad(road, length);}else{road[length++] = tp;// for(int i=0; i<6; i++)dfs(i, road, length);sign[i] = false;length--;}}}}int main(){init();//freopen("read.txt", "r", stdin);start = 0; over = 3;dfs(start, road, 0);cout << "ok" << endl;}
原文:http://www.cnblogs.com/sober-reflection/p/2389994df5c019942b2e3578416b6ebb.html