[MN-dev] [mndiff]: r178 - trunk/ffvotetov/ffvotetov.c
michael
subversion at mplayerhq.hu
Fri Dec 18 20:51:02 CET 2009
Author: michael
Date: Fri Dec 18 20:51:02 2009
New Revision: 178
Log:
Better tie breaking for IRV.
Modified:
trunk/ffvotetov/ffvotetov.c
Modified: trunk/ffvotetov/ffvotetov.c
==============================================================================
--- trunk/ffvotetov/ffvotetov.c Fri Dec 18 19:52:51 2009 (r177)
+++ trunk/ffvotetov/ffvotetov.c Fri Dec 18 20:51:02 2009 (r178)
@@ -212,6 +212,7 @@ void print_irv(void){
printf("Instant runoff winners:\n");
for(;;){
int votes[CANDIDATES_MAX]={0};
+ int votes2[CANDIDATES_MAX]={0};
int min= INT_MAX;
int non_min= 0;
@@ -222,19 +223,33 @@ void print_irv(void){
}
for(i=0; i<canditate_count; i++){
fprintf(stderr, "%3d", votes[i]);
+ if(!droped_canditates[i] && votes[i] < min)
+ min=votes[i];
+ }
+
+ for(i=0; i<vote_count; i++){
+ for(j=0; j<canditate_count && irv[i][j] && droped_canditates[irv[i][j]-1]; j++);
+ if(j<canditate_count && irv[i][j] && votes[ irv[i][j]-1 ]== min)
+ j++;
+ for(; j<canditate_count && irv[i][j] && droped_canditates[irv[i][j]-1]; j++);
+ if(irv[i][j])
+ votes2[ irv[i][j]-1 ]++;
+ }
+ min= INT_MAX;
+ for(i=0; i<canditate_count; i++){
+ fprintf(stderr, "%3d", votes2[i]);
if(!droped_canditates[i]){
- if(min != INT_MAX && votes[i] != min)
- non_min=1;
- if(votes[i] <= min){
- min=votes[i];
- }
+ if(min != INT_MAX && votes2[i] != min)
+ non_min= 1;
+ if(votes2[i] <= min)
+ min=votes2[i];
}
}
fprintf(stderr, "\n");
if(!non_min)
break;
for(i=0; i<canditate_count; i++){
- if(votes[i] == min)
+ if(votes2[i] == min)
droped_canditates[i]=1;
}
}
More information about the Mndiff-dev
mailing list