Code Thi Toán R I R C

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

THUẬT TOÁN PRIM

int n, a[100][100];
int vs[100], d[100], e[100];
void Prim(int s) {
for (int v= 1; v<= n, v++) {
vs[v]= 0; d[v]= a[s][v]; e[v]= s};
vs[s]= 1; d[s]= 0; e[s]= 0;
int wt= 0, dem = 1;
while (dem < n) {
int u = 0;
int min = 30000;
for (v = 1; v<= n; v++)
if (vs[v]==0 && d[v] < min) {
min= d[v]; u= v;
}
if (u==0) {
cout << “Khong co cay khung”; return;}
vs[u]= 1; wt= wt + a[u][e[u]];
for (v= 1; v<= n; v++)
if (vs[v]==0 && d[v] > a[u][v])
{d[v]= a[u][v]; e[v]= u; }
}
cout << wt << endl;
for (v= 1; v<= n; v++)
if (e[v] !=0)
cout << v << “ “ <<e[v] << endl;
return;
}
THUẬT TOÁN KURSAL
int n, m, d[10000], c[10000], ts[10000];
int vs[100], t[100];
void Kruskal() {
for (int i= 1; i<= m-1, i++)
for (int j= i+1;j<= m, j++)
if (ts[i] > ts[j]) {
int tg = ts[i]; ts[i]= ts[j]; ts[j]= tg;
tg = d[i]; d[i]= d[j]; d[j]= tg;
tg = c[i]; c[i]= c[j]; c[j]= tg; };
int wt= 0, k= 0;
for (i= 1; i<= n; i++) vs[i]= 0;
for (i= 1; i<= m; i++)
if (!(vs[d[i]] !=0 && vs[d[i]] == vs[c[i]])){
k++; t[k]= i; wt= wt + ts[i];
if (k == n-1) { cout << wt << endl;
cout << d[t[i]] << “ “ <<c[t[i]] << endl;
return; }
int u= d[i], v= c[i];
if (vs[u] == 0 && vs[v] == 0){
vs[u]= k; vs[v]= k;}
else
if (vs[u]==0 && vs[v]!=0) vs[u]= vs[v];
else
if (vs[u]!=0 && vs[v]==0) vs[v]= vs[u];
else
if (vs[u] < vs[v]) {
tg= vs[v];
for (j= 1; j<= n; j++)
if (vs[j] == tg) vs[j]= vs[u];
}
else if (vs[v] < vs[u]) {tg= vs[u];
for (j= 1; j<= n; j++)
if (vs[j] == tg) vs[j]= vs[v]; }
}

LIỆT KÊ DÃY NHỊ PHÂN CÓ ĐỘ DÀI n


#include <stdio.h>
void init(int b[], int n);
void out(int b[], int n);
int islast(int b[], int n);
void gen(int b[], int n);
void gen_method(int b[], int n);
int d = 0;
int main()
{
int n;
printf("input n = ");
scanf("%d",&n);
int b[n+1];
gen_method(b,n);
return 0;
}
void init(int b[], int n)
{
for (int i = 1; i<=n; i++) {
b[i] = 0;
}
}
void out(int b[], int n)
{
printf("%d: ",++d);
for (int i =1; i<=n; i++) {
printf("%d ",b[i]);
}
printf("\n");
}
int islast(int b[], int n)
{
for (int i = 1; i<=n; i++) {
if (b[i]==0) {
return 0;
}
}
return 1;
}
void gen(int b[], int n)
{
int i = n;
while (b[i]==1) {
b[i--] = 0;
}
b[i] = 1;
// for (int j = i+ 1; j<=n; j++) {
// b[j] = 0;
//}
}
void gen_method(int b[], int n)
{
init(b,n);
out(b,n);
int stop = islast(b,n);
while (stop == 0) {
gen(b,n);
out(b,n);
stop = islast(b,n);
}
}
-----------------------------------------------------------------------------------------------------------
LIỆT KÊ CÁC TẬP CON k PHẦN TỬ CỦA TẬP n PHẦN TỬ
# include <stdio.h>
void init(int a[], int k);
void out(int a[], int k);
void gen(int a[], int k, int n);
void gen_method(int a[], int k, int n);
int islast(int a[], int k, int n);
int main()
{
int n, k;
printf("input n = ");
scanf("%d",&n);
printf("input k = ");
scanf("%d",&k);
int a[k+1];
gen_method(a,k,n);
return 0;
}
void init(int a[], int k)
{
for (int i = 1; i <= k; i++) {
a[i] = i;
}
}
void out(int a[], int k)
{
for (int i = 1; i <= k; i++) {
printf("%d ",a[i]);
}
printf("\n");
}
void gen(int a[], int k, int n)
{
int i= k;
while (a[i]==n-k+i) {
i--;
}
a[i] = a[i] +1;
for (int j = i+1; j<=k; j++) {
a[j] = a[i] -i +j;
}
}
void gen_method(int a[], int k, int n)
{
init(a,k);
out(a,k);
int stop = islast(a,k,n);
while (stop == 0) {
gen(a,k,n);
out(a,k);
stop = islast(a,k,n);
}
}
int islast(int a[], int k, int n)
{
for (int i = 1; i<=k; i++) {
if(a[i]!=n-k+i) return 0;
}
return 1;
}
-----------------------------------------------------------------------------------------------------------
LIỆT KE CÁC TẬP CON CỦA PHẦN TỬ X
#include <stdio.h>
void init(int a[], int k);
void out(int a[], int k);
int islast(int a[], int k, int n);
void gen(int a[], int k, int n);
void gen_method(int a[], int k, int n);
int d = 0;
int main()
{
int n, k;
printf("input n = ");
scanf("%d",&n);
for (int k = 1; k<=n; k++) {
int a[k+1];
gen_method(a,k,n);
}
return 0;
}
void init(int a[], int k)
{
for (int i = 1; i<=k; i++) {
a[i] = i;
}
}
void out(int a[], int k)
{
d++;
printf("%d: ",d);
for (int i = 1; i<=k; i++) {
printf("%d ",a[i]);
}
printf("\n");
}
int islast(int a[], int k, int n)
{
for (int i =1; i<=k; i++) {
if (a[i]!=n-k+i) {
return 0;
}
}
return 1;
}
void gen(int a[], int k, int n)
{
int i = k;
while (a[i]==n-k+i) {
i--;
}
a[i] = a[i] + 1;
for (int j = i+1; j<=k; j++) {
a[j] = a[i] + j - i;
}
}
void gen_method(int a[], int k, int n)
{
init(a,k);
out(a,k);
int stop = islast(a,k,n);
while (stop == 0) {
gen(a,k,n);
out(a,k);
stop = islast(a,k,n);
}
}

LIỆT KÊ CÁC HOÁN VỊ CỦA N PHẦN TỬ


# include <stdio.h>
void init(int a[], int n);
void out(int a[], int n);
void gen(int a[], int n);
void gen_method(int a[], int n);
int islast(int a[], int n);
int d=0;
int main()
{
int n;
printf("input n = ");
scanf("%d",&n);
int a[n+1];
gen_method(a,n);
return 0;
}
void gen(int a[], int n)
{
int j=n-1;
while (a[j]>a[j+1]) {
j--;
}
int k=n;
while (a[k]<a[j])
{
k--;
}
int temp=a[j];
a[j]=a[k];
a[k]=temp;
int l=j+1;
int r=n;
while (l<r)
{
int t=a[l];
a[l]=a[r];
a[r]=t;
l++;
r--;
}
}
void init(int a[], int n)
{
for (int i = 1; i <= n; i++) {
a[i] = i;
}
}
void out(int a[], int n)
{
d++;
printf ("%d : ",d);
for(int i=1; i<=n;i++)
{
printf ("%d ", a[i]);
}
printf("\n");
}
int islast(int a[], int n)
{
for (int i = 1; i<=n; i++) {
if(a[i]< a[i+1])
{
return 0;
}
return 1;
}
}
void gen_method(int a[], int n)
{
init(a,n);
out(a,n);
int stop = islast(a,n);
while (stop == 0) {
gen(a,n);
out(a,n);
stop = islast(a,n);
}
}

You might also like