题意:
给出n, m,代表n个结点, m条边
n个结点编号从0到n-1
m个条边, 利用一个load数组储存是否存在, 下标为该边的两个结点编号, 存在则为1, 不存在则为0;
要求:找出不重复边的遍历结点数最大是多少~
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int max;
int load[50][50];
void search(int begin, int end, int cnt) {
int i, flag = 0;
for(i = 0; i < end; i++) {
if(load[begin][i] == 1) {
flag = 1;
load[begin][i] = load[i][begin] = 0;
search(i, end, cnt+1);
load[begin][i] = load[i][begin] = 1;
}
}
if(!flag)
max = max > cnt? max : cnt;
}
int main() {
int n, m, cnt, i;
int from, to;
while(scanf("%d%d", &n, &m) && n && m) {
memset(load, 0, sizeof(load));
for(i = 0; i < m; i++) {
scanf("%d%d", &from, &to);
load[from][to] = load[to][from] = 1;
}
max = 0;
//从每个点开始遍历
for(i = 0; i < n; i++) {
cnt = 0;
search(i, n, cnt);
}
printf("%d\n", max);
}
}